彻底理解 OAuth2 协议

OAuth2作用
1. 委派信任(主流)平台完成登录验证授权操作,解决三流平台传统简单登录,不安全的弊端
2. 权限颗粒度实现,scope
3. 跨站点sso
4. 移动端app登录验证
OAuth 2流程
1 - 跳转到委派授权服务器地址
具体(用户点击第三方平台登录时触发):
1.1 - 拼接请求授权相关参数到委派授权登录验证的服务器网址
拼接相关参数:
client_id:客户端在服务端注册获取的id,也称为app id。服务端根据此id判定是哪个客户端在请求授权。
(你客户端需要委派服务器帮忙登录验证授权,就要在服务器注册,服务器那边记录了你这个客户端才能信任你并给你提供服务端的登录验证授权服务。)
redirect_url:重定向地址,用于服务端完成登录验证后跳转回来
scope:授权范围,客户端请求的授权范围
response_type:token的模式
state:可选参数,服务端随机生成的一个数,用于防止csrf(跨站点请求伪造攻击),确认请求身份非伪造
......
1.2 - 重定向当前地址为拼接的委派授权地址
2 - 获取授权码
具体:
2.1 - 用户在委派授权服务器网址中进行登录验证
2.2 - 委派授权服务器对用户登录验证身份后,请求用户授权(用户对是否授权...权限回复)
2.3 - 返回授权码authorization
3 - 请求登录令牌access token
具体:
3.1 - 跳转回客户端
根据第一步时拼接的参数里记录的重定向地址,重定向回客户端地址,并携带授权码
3.2 - 向授权服务器请求登录令牌access token
客户端的后台服务器用返回的授权码和一些参数去向委派服务器兑换access token
一些参数:
authorization code:授权码,服务端返回的授权码,用来给客户端兑换登录令牌
client id:客户端id,判定是哪个客户端要兑换登录令牌
client serect:客户端密钥,用于交换登录令牌,也是客户端在服务端注册时获取。客户端需保密到后台,其曾用于加密token,兑换时通过该密钥解密
(委派服务器不直接返回access token而是返回授权码再让客户端来请求accesstoken的原因——因为浏览器直接前端通信传不安全,access token通过后端通信传递更安全。)
4 - 客户端请求访问资源
具体:
4.1 - 客户端用上一步获取到的access token去服务端的资源服务器请求获取用户相关资料(即通过服务端的资源api传access token获取用户同意授权的相关资源)
1 - 授权码模式
标准,安全
客户端的后台与服务端认证服务器进行通信
授权码模式固定response_type为code
2 - 简化模式
token暴露,不安全,简单,用于无后台的web应用
浏览器访问授权服务器后台进行登录验证授权之后,授权服务器直接在重定向地址回传参数access token登录令牌而不是authorization code授权码。
3 - 密码模式
用户向客户端提供账号密码,客户端拿账号密码去向服务端登录验证
不安全,需要十分信任客户端,用于向前兼容。
4 - 客户端模式
客户端自己向服务端认证(不需要用户参与)
直接客户端密钥和token去服务端获取token。为后台api服务消费者设计