内容:结合实际平台应用,以开发者视角简单描述OAuth2.0
OAuth2.0其实是一种授权机制,而且在日常的互联网环境中是非常常见的,比如一些网站或者应用,在我们选择登录时,常常会有第三方登录选项,其实这就是OAuth2.0的一种实现。
官方协议流程
这里直接引用官网文档流程
授权码模式
其实OAuth2.0有四种模式,但授权码模式(authorization code)是功能最完整、流程最严密的授权模式,所以笔者只对该模式进行展开,其他模式类比即可 单纯懒。
授权码模式官方的流程如下图
对于流程细节和其他三种模式感兴趣的可以直接去理解OAuth 2.0 - 阮一峰的网络日志。
实例
这里我们直接以京东平台为例,看一下以开发者视角如何对接平台的OAuth2.0授权 这里夸一下京东的文档。
1)获取code
获取code
,其实就对应上面流程图中红色框选的步骤,这一步的主要目的是告诉授权服务器,该用户已经同意用京东账号登录其他的应用了。
那么京东平台对于这一操作的实现方式是:让开发者拼接授权url,即
https://open-oauth.jd.com/oauth2/to_login?app_key=XXXXX&response_type=code&redirect_uri=XXXXX&state=20180416&scope=snsapi_base
其中,redirect_url
为请求回调地址,当用户完成授权后,京东通过该地址请求回调返回code
,即流程图中绿色框选的部分。
2)获取access_token
通过上一步我们已经获取到了code
,接下来就是用以此换取access_token
,即流程图中黄色框选部分。
京东平台是通过拼接获取url的方式来换取code
的,即
https://open-oauth.jd.com/oauth2/access_token?app_key=XXXXX&app_secret=XXXXX&grant_type=authorization_code&code=XXXXX
通过请求该地址,即可获取access_token
,即蓝色框选部分。
3)刷新access_token
第二步获取access_token
时,refresh_token
也会同时返回。
因为一般情况下,令牌是短期的,到期会自动失效,所以就需要有refresh_token
参数来刷新令牌。
京东平台依旧是通过拼接url的方式来刷新access_token
,即
https://open-oauth.jd.com/oauth2/refresh_token?app_key=XXXXX&app_secret=XXXXX&grant_type=refresh_token&refresh_token=XXXXX
通过请求该地址,即可刷新access_token
,同时获取到新的refresh_token
。
总结
OAuth2.0其实简而言之,就是让通过用户本人授权,让一个拥有足够信用的应用使用该用户的一些信息。
虽然,通过用户直接输入密码也可以达到同样的效果,但使用这一模式有几个很大的优势
(1)令牌为短期有效
(2)令牌可以设置权限范围通过传递不同的参数获取不同的权限范围,上文并没有细说
(3)令牌相比于密码更加可控,即数据所有者可立即撤销令牌
标签:code,认识,access,token,简单,授权,OAuth2.0,XXXXX From: https://www.cnblogs.com/lenux/p/18256141