一. OAuth是什么

OAuth 是Open Authorization的简写。OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。

通俗地说,就是当我们想把自己系统的某些功能暴露给第三方系统进行调用,并且需要对第三方系统的调用设置一定的访问权限。

这样一来这两个系统的开发人员之间就得做系统的对接,

但如果本方系统按照OAUTH协议的标准进行了相应的实现,那么这个对接的过程就不需要双方进行额外沟通。调用方只要按照标准的实现进行对接就可以了。

OAuth协义有两个版本1.0 和 2.0 ,2.0 相对比较简洁是目前比较流行的做法。OAuth具体的实现细节大致如下:

1. 由本方系统向第三方系统提供公钥和clientId

2. 第三方系统的某次访问以http形式携带公钥和clientId访问本方系统的OAuth授权中心

3.授权中心将对合法的请求返回一个授权code

4.第三方再携带code再次访问授权中心用code去换取令牌,这个过程应走https的加密通道

5. 获得令牌后,就可以携带令牌访问本方系统开放给第三方系统的API服务了

二. OAuth和SSO单点登录的区别

OAuth2解决的是服务提供方(微信等)给第三方应用授权的问题,而sso解决的是大型系统中各个子系统如何共享登陆状态的问题。
两者都是基于分布式系统,涉及到多个角色,但是不同的是,OAuth2是一种具体的协议,sso可以说是一种技术,可以用cookie实现,

甚至也可以用OAuth2实现(虽然不是很好),比如OAuth中的服务提供方可以充当sso认证中心,OAuth中的第三方应用也可以是sso中的子系统。

三.在微服务中何时可以考虑使用OAuth认证

除非要把自己系统的功能暴露给第三方访问(即暴露自己的注册中心),且不需要双方进行额外沟通,本方才需要实现OAuth2授权

四.实现微信帐号登录自己系统的原理

此时微信一方应实现OAuth2授权,我们的系统通过调用微信的授权获得令牌,然后用令牌去访问微信的相关接口(例如获取用户名等等)来实现微信用户在本方系统的登录和访问。

五. OAuth应用的场景

1. 有的系统希望第三方系统的用户也可以访问他的系统,以提升访问流量。

例如:我们开发的一套系统,希望微信或者QQ的用户能够无需注册就能登录访问我们的系统,这需要借助微信或者QQ提供的OAuth的API完成授权验证,然后访问微信或者QQ的公开的API获到用户信息,然后就可以让微信或者QQ的用户访问我们的系统。因为通过微信或者QQ的OAuth接口的验证,我们是可以信任这些用户的,并且也获取到了这些用户的信息。

2. 不同的系统之间的功能协作

例如:一个用户同时是两个系统(系统A和系统B)的用户,现在A系统有一个功能,希望是调用B系统某个功能来协助完成的。比如有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。

参考资料:

https://www.cnblogs.com/AloneSword/p/4167573.html

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

对OAuth协议的认识的更多相关文章

  1. 集成基于OAuth协议的单点登陆

    在之前的一篇文章中,我们已经介绍了如何为一个应用添加对CAS协议的支持,进而使得我们的应用可以与所有基于CAS协议的单点登陆服务通讯.但是现在的单点登陆服务实际上并不全是通过实现CAS协议来完成的.例 ...

  2. oauth协议

    微博 : 新浪 腾讯 OAuth 新浪微博   APP开发 步骤:1.注册新浪开发者账号 获取以下信息 client_id  123456  标示应用身份的  唯一的  有的也叫App Key sec ...

  3. OAUTH 协议介绍

    OAUTH 产生背景 随着互联网的深入发展,一些互联网巨头积累了海量的用户和数据.对于平台级软件厂商来说,用户的需求多种多样,变化万千 以一己之力予以充分满足,难免疲于本命.因此将数据以接口的形式开放 ...

  4. oAuth协议学习

    我们的项目需要为一个认证网站开发一套API,这些API可以提供给很多公司来调用,但是公司在调用之前,必须先做授权认证,由此接触到了oAuth协议. 以下内容来自网络整理 定义 OAUTH协议为用户资源 ...

  5. OAUTH协议简介

    OAUTH协议简介 原文来自:http://blog.csdn.net/hereweare2009/article/details/3968582 分类: Open API2009-03-08 12: ...

  6. Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议

    OAuth协议简介 OAuth协议要解决的问题    OAuth协议中的各种角色 OAuth协议运行流程 OAuth协议,在网上也看了一些资料,意思就是给你颁发一个临时的通行证,你拿着这个通行证可以访 ...

  7. [典型漏洞分享]结合YS业务分析使用oauth协议的风险

    结合YS业务分析oauth协议风险 问题描述: YS 使用QQ互联的openAPI实现QQ登录YS的功能,使用该功能需要在腾讯注册登录时的回调地址,根据oauth协议,用户的code或者access_ ...

  8. OAUTH协议介绍

    OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可 ...

  9. 认证授权:学习OAuth协议

    1.什么是OAuth协议? OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.同时,任何第三方都可以使用OAuth认证服务,任何服务提供商都可以实现自身的OAuth认证服务,因而OA ...

随机推荐

  1. 程序员如何开始做一个自己的 Side Project?

    此系列文章我们开始聊一些软件开发人员如何开始动手写一些自己项目(Side Project)的思路与方法,以及过程中可能需要准备的知识,并分享一些相关的资源给大家. 1. 什么是 Side Projec ...

  2. 定制json序列化

    最近有人问我怎么定制一个json序列化,使序列化的时候只写出声明的父类成员,而不要把实际子类的成员写出来.当然,序列化用的是大家用的最多的json.net. 简单的说,这是个契约怎么解析的问题,jso ...

  3. axios拦截器

    import axios from "axios"; axios.interceptors.response.use(response => { //=>设置响应拦截器 ...

  4. #Leetcode# 997. Find the Town Judge

    https://leetcode.com/problems/find-the-town-judge/ In a town, there are N people labelled from 1 to  ...

  5. Flask中使用数据库连接池 DBUtils ——(4)

    DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程 ...

  6. OpenCV__cv::Mat::step

    step[0]是矩阵中一行元素的字节数 step[1]是矩阵中一个元素的字节数(elemSize) step1 = step / elemSize1,elemSize1是元素的每个通道所占的字节数 s ...

  7. 第六章· Redis高可用sentinel

    sentinel介绍 sentinel实战及配置讲解 sentinel介绍 什么是sentinel? Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Mas ...

  8. 单双通道对RTX有何影响?结果出乎意料

    此前,我们在统计RTX游戏本数据时发现了一个有趣的现象,游戏本上的RTX显卡性能出现了明显断层,具体来说就是RTX 2080的性能要远好于RTX 2080 Max-Q,两者差距幅度高达37%,详细测试 ...

  9. BZOJ4762 最小集合(动态规划+容斥原理)

    https://www.cnblogs.com/AwD-/p/6600650.html #include<iostream> #include<cstdio> #include ...

  10. C++ Under the Hood

    The original article is taken from http://msdn.microsoft.com/archive/en-us/dnarvc/html/jangrayhood.a ...