OAuth2.0说明文档

1OAuth 2.0 简介

OAuth为应用提供了一种访问受保护资源的方法。在应用访问受保护资源之前,它必须先从资源拥有者处获取授权(访问许可),然后用访问许可交换访问令牌(代表许可的作用域、持续时间和其它属性)。应用通过向资源服务器出示访问令牌来访问受保护资源。

下图中的名词说明

Resource Owner:用户

User-Agent:浏览器

Client:应用服务器

Authorization Server:认证服务器(用户信息存放服务的认证服务器)

Resource Server:资源服务器(用户真正信息存放的服务器,需要通过access_token进行访问)

Web-Hosted Client Resource:web托管的客户端资源(这个确切的说,我也不知道叫啥才适合)

OAuth2.0服务支持以下5种获取Access Token的方式:(图片来源:OAuth2.0协议草案 )

1.1APP密钥模式(Client Credentials Flow)

直接使用app密钥,不另作说明

1.2Resource Owner Password Credentials Flow

直接使用用户密码,不另作说明

1.3Authorization Code Flow

授权码模式

流程简单表述为,当用户访问应用服务器

(A)应用服务器返回带有授权信息的重定向链接,浏览器拿到链接,转为访问认证服务器(见下面:获取Authorization Code)

(B)认证服务器提供界面给用户进行确认授权,用户确认授权

(C)用户确认授权后,认证服务器返回带有code的重定向链接,浏览器拿到链接,转为访问应用服务器

(D)应用服务器拿到code,访问认证服务器(见下面:通过Authorization Code获取Access Token

(E)认证服务器验证后,返回access_token给应用服务器

授权码是应用弹出窗口,并将用户引导到授权服务器,传入标识符、请求作用域、本地状态,和一个重定向URI。授权服务器验证用户,获得授权,然后用重定向URI引导回应用,并传回授权码给应用。因为终端用户只在授权服务器上进行验证,所以终端用户的用户名和密码从来不用分享给应用。

获取Authorization Code

参数名

必选

介绍

client_id

True

创建应用时获得的App Key

response_type

True

此值固定为“code”

redirect_uri

True

授权后要回调的URI,即接收Authorization Code的URI, 其值可以是“oob”。 非“oob”值的redirect_uri所在域名必须与开发者注册应用时所提供的回调地址的域名相匹配

scope

False

以空格分隔的权限列表,若不传递此参数,代表请求默认的basic权限。(目前只有basic权限)

state

False

hash,用于预防CSRF,用于保持请求和回调的状态,授权服务器在重定向到“redirect_uri”时,会在Query Parameter中原样回传该参数

/authorize?client_id=ABCDEFGHIJKLMNOP&response_type=code&redirect_uri=http://www.example.com/oauth_redirect&scope=basic&state=mytest

如果用户在此页面同意授权,则将重定向用户浏览器到指定的“redirect_uri”,并附带上表示授权服务所分配的Authorization Code的code参数(假设为“0987654321“),以及state参数(如果有),验证通过后,认证服务器将重定向用户浏览器到“http://www.example.com/oauth_redirect?state=mytest&code=0987654321”

说明:每一个Authorization Code的有效期为60秒(可根据需求调长一些,但原则上应尽可能短),并且只能使用一次,再次使用将无效。

通过Authorization Code获取Access Token

通过上面第一步获得Authorization Code后,便可以用其向认证服务器换取一个Access Token。

参数名

必选

介绍

grant_type

True

此值固定为“authorization_code”

code

True

通过上面第一步所获得的Authorization Code

client_id

True

创建应用时获得的App Key

client_secret

True

应用的App Secret

redirect_uri

True

redirect_uri所在域名必须与开发者注册应用时所提供的回调地址的域名匹配

/access_token?grant_type=authorization_code&code=0987654321&client_id=ABCDEFGHIJKLMNOP&client_secret=abcdefg...&redirect_uri=http://www.example.com/oauth_redirect

若参数无误,服务器将返回一段JSON文本,包含以下参数:

参数名

必选

介绍

access_token

True

获取的Access Token

token_type

False

令牌类型“bearer”或“mac”,暂无很明确的说明,通常是brearer或省略

expires_in

True

Access Token的有效期,以秒为单位

refresh_token

False

用于刷新Access Token 的 Refresh Token

scope

False

Access Token最终的访问范围,即用户实际授予的权限列表,用户在授权页面时,有可能会取消掉某些请求的权限,通常只作或只有登录认证的话,可忽略

示例:Content-Type: application/json

{"access_token":"uuvvwwxxyyzz","expires_in":"3600", "scope":"basic","refresh_token":"qwertyuiop"}

1.4Implicit Grant Flow

简化模式,该模式下,通常client和user-agent是在一起的,如手机app等

流程简单表述为,当用户访问应用服务

(A)应用服务返回带有授权信息的重定向链接,浏览器拿到链接,转为访问认证服务器

(B)认证服务器提供界面给用户进行确认授权,用户确认授权

(C)假设资源所有者授予访问权限,则认证服务器返回带有获取access_token的令牌的链接

(D)浏览器链接重定向到一个web客户端资源,访问资源服务器

(E)返回一个网页(通常是一个嵌入式脚本的HTML文档)

(F)浏览器从脚本中提取access_token(包括其他参数)

(G)浏览器带着access_token重定向到应用服务器,应用服务器到浏览器传来的access_token

采用Implicit Grant方式获取Access Token的授权验证流程又被称为User-Agent Flow,适用于所有无Server端配合的应用(由于应用往往位于一个User Agent里,如浏览器里面,因此这类应用在某些平台下又被称为Client-Side Application),如手机/桌面客户端程序、浏览器插件等,以及基于JavaScript等脚本语言实现的应用。

1.5Refreshing an Expired Access Token

令牌刷新方式,适用于所有有Server端配合的应用,其实就是更新access_token

获取Access Token,都会拿到有效期为14天的Refresh Token,和2分钟有效期的Access Token。对于这些应用,只要用户在14天内登录,应用就可以使用Refresh Token获得新的Access Token。

要使用Refresh Token获得新的Access Token,需要应用在其服务端发送请求(推荐用POST方法)到开放平台OAuth2.0授权服务的以下地址: “/access_token”,并带上以下参数:

参数名

必选

介绍

grant_type

True

必须为“refresh_token”

refresh_token

True

用于刷新Access Token用的Refresh Token

client_id

True

创建应用时获得的App Key

client_secret

True

应用的App Secret

scope

False

以空格分隔的权限列表,若不传递此参数,代表请求默认的basic权限。注:通过Refresh Token刷新Access Token时所要求的scope权限范围必须小于等于上次获取Access Token时授予的权限范围

示例:

/access_token?grant_type=refresh_token&refresh_token=qwertyuiop&client_id=ABCDEFGHIJKLMNOP&client_secret=abcdefg...&scope=basic

若请求成功服务器将返回一段JSON文本,包含以下参数

示例:Content-Type: application/json

{ "access_token":"uuvvwwxxyyzz","expires_in":"120","scope":"basic","refresh_token":" qwertyuiop"}

2、使用access_token调用API

获取access_token以后,就可以使用access_token调用API接口。

调用API的URL“/json”传递需要的参数,参数的详细介绍请参照以上描述

例:/json?access_token=uuvvwwxxyyzz

OAuth2.0说明文档的更多相关文章

  1. OAuth2.0理解和用法

    现在网络的资料到处都是,很容易搜索到自己想要的答案.但答案通常只能解决自己一部分的问题.如果自己想要有一套自己的解决方案,还得重新撸一遍靠谱. 我需要学下OAuth2.0吗? 没看之前以为OAuth2 ...

  2. SWFUpload 2.5.0版 官方说明文档 中文翻译版

    原文地址:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html#setFileUploadLimit SWFUpload v2 ...

  3. 如何使用Swagger为.NET Core 3.0应用添加JWT授权说明文档

    简介 本教程采用WHY-WHAT-HOW黄金圈思维模式编写,黄金圈法则强调的是从WHY为什么学,到WHAT学到什么,再到HOW如何学.从模糊到清晰的学习模式.大家的时间都很宝贵,我们做事前先想清楚为什 ...

  4. NetCore 3.0 中使用Swagger生成Api说明文档及升级报错原因

    认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参 ...

  5. OAuth2.0学习(1-11)新浪开放平台微博认证-使用OAuth2.0调用微博的开放API

    使用OAuth2.0调用API 使用OAuth2.0调用API接口有两种方式: 1. 直接使用参数,传递参数名为 access_token URL 1 https://api.weibo.com/2/ ...

  6. Asp.netCore 3.0 Web 实现Oauth2.0微信授权登陆的测试

    1:Oauth2.0授权的流程截图 官方流程如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果 ...

  7. 深入理解OAuth2.0协议

    1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店 ...

  8. OAuth2.0 四种授权模式

    OAuth2.0简单笔记(四种授权模式) 金天:坚持写东西,不是一件容易的事,换句话说其实坚持本身都不是一件容易的事.如果学习有捷径,那就是不断实践,不断积累.写笔记,其实是给自己看的,是体现积累的一 ...

  9. 微信公众平台开发——微信授权登录(OAuth2.0)

    1.OAuth2.0简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户 ...

随机推荐

  1. 两个有意思的模式在ECMAScript中的实现

    简介 本篇文章对设计模式进行了筛选, 只列举两个有意思(坑)的设计实现, 如有错误愿闻其详. 构造函数 ECMAScript中的构造函数和其他语言的有那么点特别之处,可以认为, 一个函数, 如果被以n ...

  2. ubuntu-14.04服务器版下搭建apache2+svn+svnmanager服务

    本人linux小白,新进公司,被分配此任务,好崩溃,只能一边百度linux命令一边完成任务.从装系统开始一直到搭建好服务,也快一周了,足见水平之差,以下博文基本靠网络,再加上自己的摸索,直至搭建成功. ...

  3. Python之路-(Django进阶二)

    model: 双下划线: # 获取个数 # # models.Tb1.objects.filter(name='seven').count() # 大于,小于 # # models.Tb1.objec ...

  4. Lua参数绑定函数实现方法

    背景 对于某一个函数, 其被调用多次, 每次调用的入参都是一致的. 不想每次都填写参数, 如果能够定义一个新的函数, 将参数跟此函数绑定就棒哒哒了. local function pirntfunc( ...

  5. 在设置app icon时的问题

    APP 运行时遇到 the app icon set named appicon did not have any applicable content 是应该考虑是icon可能偏大

  6. WebForm 页面传值

    一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是 ...

  7. IOS在线安装App

    在越狱设备上可以安装,如果设备不越狱也想安装,就要企业发布权限了,可惜我没有,所以不能测试了! 1.创建ipa及plist文件: XCode菜单栏->Product->Archive-&g ...

  8. JavaSE基础第四篇

    1.参数传递   2,方法的重载 方法的参数的个数.类型.顺序 跟修饰符.返回值无关   3.构造方法: return 表示当前方法执行结束,后面不能写任何语句   4工程导入 单个.java文件粘贴 ...

  9. JSONObject put,accumulate,element的区别

    public Object put (Object key, Object value) 将value映射到key下.如果此JSONObject对象之前存在一个value在这个key下,当前的valu ...

  10. paper 120:计算距离矩阵的函数的pdist和pdist2函数

    matlab中自带的计算距离矩阵的函数有两个pdist和pdist2.前者计算一个向量自身的距离矩阵,后者计算两个向量之间的距离矩阵.基本调用形式如下: D = pdist(X) D = pdist2 ...