OAuth2.0的简单认识

内容:结合实际平台应用,以开发者视角简单描述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)令牌相比于密码更加可控,即数据所有者可立即撤销令牌

posted @   有了一个点子  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2023-06-19 .NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求
点击右上角即可分享
微信分享提示