T31训练营笔记(9)OAuth2

1. OAuth2是什么
1.1 OAuth2是什么
OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。
1.2 OAuth2的角色
Resource Owner 资源拥有者
Client 客户端
Authorization Server 授权服务器 
Resource Server资源服务器
User Agent 用户代理
1.3 OAuth2授权模式
authorization code
implicit
password
client credential

2. 为什么使用OAuth2
2.1 单体架构:cookie session 机制
2.2 分布式架构方案1:session 共享
2.3 分布式架构方案2:基于 token
2.4 cookie session 与 token 的区别
(1)cookie 不能跨域,前后端分离分布式架构实现多系统SSO非常困难
(2)移动端没有cookie
(3)token 基于 header 传递,部分解决了 CSRF 攻击
(4)token 比 sessionID 大,客户端存储在 Local Storage 中,可被 JS 直接读取
 

3. OAuth2实践
3.1 Spring Security OAuth2 是实现了 OAuth2 协议的框架
3.2 OAuth2 的4种模式的流程
(1)authorization code 流程
第一步,A 网站提供一个链接,用户点击后就会跳转到 B 网站,授权用户数据给 A 网站使用。
https://b.com/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read
第二步,用户跳转后,B 网站会要求用户登录,然后询问是否同意给予 A 网站授权。用户表示同意,这时 B 网站就会跳回redirect_uri参数指定的网址。跳转时,会传回一个授权码。
https://a.com/callback?code=AUTHORIZATION_CODE
第三步,A 网站拿到授权码以后,就可以在后端,向 B 网站请求令牌。
https://b.com/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=CALLBACK_URL
第四步,B 网站收到请求以后,就会颁发令牌。具体做法是向redirect_uri指定的网址,发送一段 JSON 数据。
(2)implicit 流程
第一步,A 网站提供一个链接,要求用户跳转到 B 网站,授权用户数据给 A 网站使用。
https://b.com/oauth/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read
第二步,用户跳转到 B 网站,登录后同意给予 A 网站授权。这时,B 网站就会跳回redirect_uri参数指定的跳转网址,并且把令牌作为 URL 参数,传给 A 网站。
https://a.com/callback#token=ACCESS_TOKEN
(3)password 流程
第一步,A 网站要求用户提供 B 网站的用户名和密码。拿到以后,A 就直接向 B 请求令牌。
https://oauth.b.com/token?grant_type=password&username=USERNAME&password=PASSWORD&client_id=CLIENT_ID
第二步,B 网站验证身份通过后,直接给出令牌。注意,这时不需要跳转,而是把令牌放在 JSON 数据里面,作为 HTTP 回应,A 因此拿到令牌。
(4)client credential 流程
第一步,A 应用在命令行向 B 发出请求。
https://oauth.b.com/token?grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET
第二步,B 网站验证通过以后,直接返回令牌。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值