参考文章
一.OAuth是什么?

OAuth的英文全称是Open Authorization,它是一种开放授权协议。OAuth目前共有2个版本,2007年12月的1.0版(之后有一个修正版1.0a)和2010年4月的2.0版,1.0版本存在严重安全漏洞,而2.0版解决了该问题,下面简单谈一下我对OAuth2.0的理解。

OAuth 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。目前,OAuth 的最新版本为 2.0

OAuth 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth 允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

OAuth 2.0 的核心概念

  • resource owner:资源所有者,指终端的“用户”(user)
  • resource server:资源服务器,即服务提供商存放受保护资源。访问这些资源,需要获得访问令牌(access token)。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。如果,我们访问新浪博客网站,那么如果使用新浪博客的账号来登录新浪博客网站,那么新浪博客的资源和新浪博客的认证都是同一家,可以认为是同一个服务器。如果,我们是新浪博客账号去登录了知乎,那么显然知乎的资源和新浪的认证不是一个服务器。
  • client:客户端,代表向受保护资源进行资源请求的第三方应用程序。
  • authorization server: 授权服务器, 在验证资源所有者并获得授权成功后,将发放访问令牌给客户端。
二.OAuth2.0有什么用?

使用 OAuth 2.0 认证的的好处是显然易见的。你只需要用同一个账号密码,就能在各个网站进行访问,而免去了在每个网站都进行注册的繁琐过程。

简单概括,就是用于第三方在用户授权下调取平台对外开放接口获取用户相关信息。

OAuth引入了一个授权环节来解决上述问题。第三方应用请求访问受保护资源时,资源服务器在获准资源用户授权后,会向第三方应用颁发一个访问令牌(AccessToken)。该访问令牌包含资源用户的授权访问范围、授权有效期等关键属性。第三方应用在后续资源访问过程中需要一直持有该令牌,直到用户主动结束该次授权或者令牌自动过期。

三.认证授权过程

1、 服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。如QQ,微信

2、 用户,存放在服务提供方的受保护的资源的拥有者。如QQ账号,微信账号

3、 客户端,要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。如:58同城,转转,豆瓣等可以使用QQ,微信账号登陆到这些第三方应用,还能看到微信中的好友。

四.详解OAuth2.0的授权码简化模式?

简单概括,就是用于第三方在用户授权下调取平台对外开放接口获取用户相关信息。

有三个关键字:第三方,用户,平台,关系如下图

看起来很简单对吧,其实授权的部分,要比上图展示的复杂一丢丢,下面来讲解一下授权的部分。

首先,有个问题,就拿微博平台来说吧,不能说随便一个第三方过来要求申请用户资源,微博平台就去用户那问一句是否授予权限吧,微博大哥能这么随便?所以第三方需要去想要请求的接口所在平台去报备一下,也就是告诉平台:我的xxx地址想要申请使用你的接口,可以吗?等平台审核通过之后,会下发一组appid+appkey,第三方持凭此就有资格去请求该平台的接口了。

第三方的准备工作做好了,下面就是具体运作流程了。(各大平台大多使用授权码模式——Authorization Code,因为它相比其它几种模式更为严谨,这里我仅分析一下该模式的原理)

这里我们假设一个场景,就是想用‘云打印’来打印自己‘微博的关注列表’。

简图如下:

详图如下:

在第②,④,⑥,⑧步中,分别用到了云打印在微博平台上获得的appid+appkey。关于每一步请求所需要的一系列参数这里就不一一列举了,官方文档非常详细,这里仅说明一下请求code和请求access token时重要的参数。

第④步参数:

response_type:指授权类型,必选,这里填固定值‘code’

client_id:指客户端id,必选,这里填在平台报备时获取的appid

redirect_uri:指重定向URI,可选

scope:指申请的权限范围,可选

state:指客户端当前状态,可选,若填了,则认证服务器会原样返回该值

第⑥步参数:

grant_type:指使用哪种授权模式,必选,这里填固定值‘authorization_code’

code:指从第⑤步获取的code,必选

redirect_uri:指重定向URI,必选,这个值需要和第④步中的redirect_uri保持一致

client_id:指客户端id,必选,这里填在平台报备时获取的appid

client_secret:指客户端密钥,必选,这里填在平台报备时获取的appkey

第⑧步参数:

access_token:指访问令牌,必选,这里填第⑦步获取的access_token

token_type:指令牌类型,必选,大小写不敏感,bearer类型 / mac类型

expires_in:指过期时间,单位秒,当其他地方已设置过期时间,此处可省略该参数

refresh_token:指更新令牌,可选,用即将过期token换取新token

scope:指权限范围,可选,第④步中若已申请过某权限,此处可省略该参数

到这里,OAuth2.0 授权码模式的认证过程就完成了,原理还算比较简单,就是较为繁琐,但是不算难。

注意:1.code时效较短,多为10s-10min,每次获得的code仅可使用一次,且code与client_id和redirect_uri有 一一对应关系。

2.access token 有过期时间,多为10-15天。(过期处理有2种,请求用户重新授权/refreshToken,一般多用重新授权。)

3.在请求时,参数中包含重定向地址的,需要和第三方在授权方平台报备时留的地址前部一致

4.关于token_type的两种类型有什么区别,有个博客写的很详细,推荐阅读:www.cnblogs.com/XiongMaoMengNan/p/6785155.html

此处奉上找了好久才找到的OAuth2 RFC6749中文翻译:http://colobu.com/2017/04/28/oauth2-rfc6749/

本人能力有限,错误之处,敬请指正。

--------------------- 作者:张胜楠 来源:CSDN 原文:https://blog.csdn.net/tclzsn7456/article/details/79550249?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

标准的认证过程 
OAuth认证和授权的过程如下: 
1、用户访问第三方网站网站,想对用户存放在服务商的某些资源进行操作。 
2、第三方网站向服务商请求一个临时令牌。 
3、服务商验证第三方网站的身份后,授予一个临时令牌。 
4、第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。 
5、用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所相应的资源。 
6、授权成功后,服务商将用户导向第三方网站的返回地址。 
7、第三方网站根据临时令牌从服务商那里获取访问令牌。 
8、服务商根据令牌和用户的授权情况授予第三方网站访问令牌。 
9、第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。

oauth2.0授权协议的更多相关文章

  1. OAuth2.0授权

    一.什么是OAuth2.0官方网站:http://oauth.net/ http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secu ...

  2. Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端

    Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端 目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Se ...

  3. 使用DotNetOpenAuth搭建OAuth2.0授权框架

    标题还是一如既往的难取. 我认为对于一个普遍问题,必有对应的一个简洁优美的解决方案.当然这也许只是我的一厢情愿,因为根据宇宙法则,所有事物总归趋于混沌,而OAuth协议就是混沌中的产物,不管是1.0. ...

  4. 微信开发——OAuth2.0授权

    微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一. ...

  5. 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)

    ---------------------------------------------------------------------------------------------- [版权申明 ...

  6. 使用微服务架构思想,设计部署OAuth2.0授权认证框架

    1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是 ...

  7. Spring Boot 集成 Swagger2 与配置 OAuth2.0 授权

    Spring Boot 集成 Swagger2 很简单,由于接口采用了OAuth2.0 & JWT 协议做了安全验证,使用过程中也遇到了很多小的问题,多次尝试下述配置可以正常使用. Maven ...

  8. 深入浅出OAuth2.0授权

    一.前言 说到OAuth,先来一段百度到的比较官方的解释: OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信 ...

  9. API代理网关和OAuth2.0授权认证框架

    API代理网关和OAuth2.0授权认证框架 https://www.cnblogs.com/bluedoctor/p/8967951.html 1,授权认证与微服务架构 1.1,由不同团队合作引发的 ...

随机推荐

  1. 把一个集合自定转成json字符串

    List<CityData> listData =new List<CityData>(); //把一个集合自定转成json字符串. foreach (var city in ...

  2. jQuery 节点操作(创建 插入 删除 复制 替换 包裹)

    一,创建元素节点: 第1个步骤可以使用jQuery的工厂函数$()来完成,格式如下: $(html); $(html)方法会根据传入的HTML标记字符串,创建一个DOM对象,并将这个DOM对象包装成一 ...

  3. Chrome获取微信授权,调试公众号页面

    1.目的 你可能遇到过这种情况,在微信中打开公众号是这样的. 复制链接,在chrome中打开是这样的. 博主今天要解决的就是,如果在chrome中加载需要微信授权的页面,至于加载成功后要干嘛,测试?抓 ...

  4. 织梦dede解决“更新数据库archives表时出错"方法

    登陆dedecms网站管理后台,选择执行 sql命令工具,将下列命令执复制进去并执行多行执行,该问题就可以解决. alter table `idea_archives` ADD `voteid` me ...

  5. 2019.04.11 第四次训练 【 2017 United Kingdom and Ireland Programming Contest】

    题目链接:  https://codeforces.com/gym/101606 A: ✅ B: C: ✅ D: ✅ https://blog.csdn.net/Cassie_zkq/article/ ...

  6. c# 命名空间别名

    如果命名空间比较长的话,并且在程序中经常使用,就可以用using来设置命名空间的别名 ,C#引入了别名机制 缩短程序员开发时间如: using   NSSerialize = System.Compo ...

  7. OPENERP 拓展 res.partner 对象,添加QQ号

    公司最近在导入开业物品资料,根据同事的需求,需要在供应商资料中添加QQ号一项,根据前段时间自己摸索的经验,准备自己尝试通过继承完成这一需求. 模块名定义为rainsoft_partner 创建__in ...

  8. (转)OpenStack之服务端口号

    原文:https://blog.csdn.net/henulwj/article/details/47276391 在部署openstack的过程中,你会遇到配置各种服务的endpoint,opens ...

  9. spring boot快速入门 1 :创建项目、 三种启动项目方式

    准备工作: (转载)IDEA新建项目时,没有Spring Initializr选项 最近开始使用IDEA作为开发工具,然后也是打算开始学习使用spring boot. 看着博客来进行操作上手sprin ...

  10. solr集群的搭建教程和使用入门

    1 什么是SolrCloud? SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud. 当一个系统的索引数据量少的时候 ...