OAuth2 的概念
OAuth是一个关于授权的开放网络标准,OAuth2是其2.0版本。
它规定了四种操作流程(授权模式)来确保安全
应用场景有第三方应用的接入、微服务鉴权互信、接入第三方平台、第一方密码登录等
Java王国中Spring Security也对OAuth2标准进行了实现。
OAuth2授权模式
OAuth2定义了四种授权模式(授权流程)来对资源的访问进行控制
- 授权码模式(Authorization Code Grant)
- 隐式授权模式(Implicit Grant)
- 用户名密码模式(Resource Owner Password Credentials Grant)
- 客户端模式(Client Credentials Grant)
无论哪个模式(流程)都拥有三个必要角色:客户端
、授权服务器
、资源服务器
,有的还有用户(资源拥有者)
,下面简单介绍下授权流程
授权码模式(Authorization Code Grant)
授权码模式是OAuth2目前最安全最复杂的授权流程,先放一张图,稍做解释
如上图,我们可以看到此流程可大致分为三大部分
- Client Side:用户+客户端与授权服务器的交互
- Server Side:客户端与授权服务器之间的交互
- Check Access Token:客户端与资源服务器之间的交互 + 资源服务器与授权服务器之间的交互
整体上来说,可以用一句话概括授权码模式授权流程
客户端换取授权码,客户端使用授权码换token,客户端使用token访问资源
接下来对这三部分进行一些说明 :
前提条件:
- 第三方客户端需要提前与资源拥有方(同时也是授权所有方)协商客户端id(client_id),客户端密钥(client_secret)
- 文中暂时未将scope、state等依赖具体框架的内容写进来,这里可以参考Spring Security OAuth2的实现
Client Side
客户端换取授权码
这个客户端可以是浏览器,
- 客户端将
client_id + client_secret + 授权模式标识(grant_type) + 回调地址(redirect_uri)
拼成url访问授权服务器授权端点
- 授权服务器返回登录界面,要求
用户登录
(此时用户提交的密码等直接发到授权服务器,进行校验) - 授权服务器返回授权审批界面,
用户授权
完成 - 授权服务器
返回授权码到回调地址
Server Side
客户端使用授权码换token
- 客户端接收到授权码,并使用授权码 + client_id + client_secret访问授权服务器颁发token端点
- 授权服务器校验通过,颁发token返回给客户端
- 客户端保存token到存储器(推荐cookie)
Check Access Token
客户端使用token访问资源
- 客户端在请求头中添加token,访问资源服务器
- 资源服务器收到请求,先调用校验token的方法(可以是远程调用授权服务器校验端点,也可以直接访问授权存储器手动校对)
- 资源服务器校验成功,返回资源
这里的说明省去了一些参数,如scope(请求token的作用域)、state(用于保证请求不被CSRF)、redirect_uri(授权服务器回调uri),先理解概念,实现的时候再去要求
隐式授权模式(Implicit Grant)
隐式授权模式大致可分为两部分:
- Client Side:用户+客户端与授权服务器的交互
- Check Access Token:客户端与资源服务器之间的交互 + 资源服务器与授权服务器之间的交互
用一句话概括隐式授权模式授权流程
客户端让用户登录授权服务器换token,客户端使用token访问资源
Client Side
客户端让用户登录授权服务器换token
- 客户端(浏览器或单页应用)将
client_id + 授权模式标识(grant_type)+ 回调地址(redirect_uri)
拼成url访问授权服务器授权端点
- 授权服务器跳转用户登录界面,用户登录
- 用户授权
- 授权服务器
访问回调地址
返回token给客户端
Check Access Token
客户端使用token访问资源
- 客户端在请求头中添加token,访问资源服务器
- 资源服务器收到请求,先调用校验token的方法(可以是远程调用授权服务器校验端点,也可以直接访问授权存储器手动校对)
- 资源服务器校验成功,返回资源
密码模式(Resource Owner Password Credentials Grant)
密码模式大体上也分为两部分:
- Client Side: 用户与客户端交互,客户端与授权服务器交互
- Check Access Token:客户端与资源服务器之间的交互 + 资源服务器与授权服务器之间的交互
一句话概括用户名密码模式流程:
用户在客户端提交账号密码换token,客户端使用token访问资源
Client Side
用户在客户端提交账号密码换token
- 客户端要求用户登录
- 用户输入密码,客户端将表单中添加客户端的client_id + client_secret发送给授权服务器颁发token端点
- 授权服务器校验用户名、用户密码、client_id、client_secret,均通过返回token到客户端
- 客户端保存token
Check Access Token
客户端使用token访问资源
- 客户端在请求头中添加token,访问资源服务器
- 资源服务器收到请求,先调用校验token的方法(可以是远程调用授权服务器校验端点,也可以直接访问授权存储器手动校对)
- 资源服务器校验成功,返回资源
客户端模式(Client Credentials Grant)
客户端模式大体上分为两部分:
- Server Side: 客户端与授权服务器之间的交互
- Check Access Token: 客户端与资源服务器,资源服务器与授权服务器之间的交互
一句话概括客户端模式授权流程:
客户端使用自己的标识换token,客户端使用token访问资源
Server Side
客户端使用自己的标识换token
- 客户端使用client_id + client_secret + 授权模式标识访问授权服务器的
颁发token端点
- 授权服务器校验通过返回token给客户端
- 客户端保存token
Check Access Token
客户端使用token访问资源
- 客户端在请求头中添加token,访问资源服务器
- 资源服务器收到请求,先调用校验token的方法(可以是远程调用授权服务器校验端点,也可以直接访问授权存储器手动校对)
- 资源服务器校验成功,返回资源
OAuth2授权模式的选型
考虑到授权场景的多样性,可以参考以下两种选型方式
按授权需要的多端情况
按客户端类型与所有者
后记
学习OAuth2有一段时间了,把学到的知识分享出来,行文中难免有错误,如果发现还请留言指正,谢谢合作
参考文章与资料:
https://time.geekbang.org/course/intro/84 作者:杨波
https://blog.csdn.net/sinat_25295611/article/details/84980987 作者:Kayfen
How OAuth 2.0 works and how to choose the right flow 作者:Lorenzo Spyna
原文出处https://www.cnblogs.com/hellxz/p/oauth2_process.html
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]