Oauth2和jwt是完全不同的两种东西,一个是授权认证的框架,另一种则是认证验证的方式方法(轻量级概念)
无论是哪种方式,我们都应该遵循HTTP的规范,把认证信息放在http请求头的 Authorization 字段中
JWT
OAuth2.0
https://blog.csdn.net/a595077052/article/details/118996218
分发系统中的账号绑定第三方应用的登录过程就是OAuth2.0实现的,通过认证授权得到的access_token可以进行分发操作。
Authorization Code Flow 授权码模式
1、当用户(Resource Owner)访问第三方应用(Client)的时候,第三方应用会把用户带到认证服务器(Authorization Server)上去,主要请求的地址是 /authorize API,其中的请求方式如下所示。
例:微博的authUrl:
https://api.weibo.com/oauth2/authorize?
response_type=code
&client_id=%s
&redirect_uri=%s
&state=%s
client_id:第三方应用的App ID
response_type=code:告诉认证服务器,我要走Authorization Code Flow。
redirect_uri:跳转回第三方应用的URL
scope:相关的权限
state:是一个随机的字符串,主要用于防CSRF攻击。
2、当Authorization Server收到这个URL请求后,其会通过 client_id来检查 redirect_uri和 scope是否合法,如果合法,则弹出一个页面,让用户授权(如果用户没有登录,则先让用户登录,登录完成后,出现授权访问页面)。
3、当用户授权同意访问以后,Authorization Server 会跳转回 Client ,并以其中加入一个 Authorization Code
/deliver/fenfa/oauth/douyin/rongmei/callback?
code=1e6a48c8eba96549w5h3d9T8anKkuK993Fz5
&state=232279695392013328_1_4A0ABDE163AB83F24F2CEA99239A6FBFEBAAEFEFADD12B947FE534D638694D926167A50C12B8390B
URL的组成是redirect_uri + code + state
state的值与第一步是一致的
4、接下来,Client 就可以使用 Authorization Code 获得 Access Token。其需要向 Authorization Server 发出如下请求。
code=Yzk5ZDczMzRlNDEwYlrEqdFSBzjqfTG
&grant_type=code
&redirect_uri=https%3A%2F%2Fexample-client.com%2Fcallback%2F
&client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&client_secret=JqQX2PNo9bpM0uEihUPzyrh
5、没问题的话,Authorization Code 会返回认证信息
{
"access_token": "iJKV1QiLCJhbGciOiJSUzI1NiI",
"refresh_token": "1KaPlrEqdFSBzjqfTGAMxZGU",
"token_type": "bearer",
"expires": 3600,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciO.eyJhdWQiOiIyZDRkM..."
}
access_token:令牌
refresh_token:用来刷新access_token
expires:过期时间
6、接下来就可以用access_token请求有权限访问的资源了
欧耶!