文章目录
OAuth2
在 RFC 6749 中说明
1、资源所有者 resource owner, 如 github 用户
2、客户端/第三方应用 client, 如 支持github 登录的 csdn
3、资源服务器 resource server, 如
4、授权服务器 authorization server
授权所需信息
- 应用名称
- 应用网站
- 重定向 URI 或回调 URL(redirect_uri)
- 客户端标识 client_id
- 客户端秘钥 client_secret
如 github 授权 app:
OAuth 授权方式
有以下四种
- 授权码模式 Authorization Code,功能最完整、流程最严密
- 简化模式 Implict Grant;省去了第三方应用的服务器;不建议,token 会暴露。为web浏览器设置。
- 密码模式 Resource Owner Password Credentials Grant,csdn 让用户输入 github 账号密码,再将密码给 github 请求;不建议。为遗留项目设计。
- 客户端模式 Client Credentials Grant。用客户端的秘钥获取 token,不需要用户参与。为后台API 服务消费者设计。
授权码模式 参数
- response_type,必须,固定为 code,表示这是一个授权码请求;
- client_id,必须,在授权服务器祖册应用后的到的唯一标识;
- redirect_uri,可选,通过客户端注册的重定向 URI,一般要求和注册时一致;
- scope,可选,请求资源范围,多个空格隔开;
- state,可选(推荐),如果存在,原样返回给客户端。
JWT
JWT : JSON Web Token,通过数字签名的方式,以 json 对象为载体,在不同的服务终端之间安全的传输信息。
常见应用场景:授权认证
一旦用户登录后,后续每个请求都包含 JWT,系统在每次处理用户请求之前,都要进行 JWT 安全校验,通过之后再进行处理。
JWT 由三部分组成,用 .
拼接
三部分分别是:
1、 Header
json
{
'typ': 'JWT', // token 类型
'alg', 'HS256' // 算法名称
}
2、Payload 载荷,存放有效信息
对这个数据进行 base64 加密
json
{
'sub': '1234567', //
'name', 'john' //
'admin', true //
}
3、Signature
加密后的 Header 和 Payload 用 .
拼接,让后将结果,用 header 中申明的算法再加盐加密一次。
json
var encodedstring = base64UrlEncoder(header) + '.' + base64UrlEncoder(payload);
var signature = HMACSHA256(encodedstring, 'secret')
参考
- 魔王不造反:彻底理解 OAuth2 协议
https://www.bilibili.com/video/BV1zt41127hX - 阮一峰:OAuth 2.0 的四种方式
https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html
伊织 2022-03-26