Spring用户认证体系(Oauth2.0)
# 授权模式
# https://zhuanlan.zhihu.com/p/92051359 (详细)
# https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
# 适用于三方应用场景,最严谨的校验模式
授权码模式:https://wx.qq.com/oauth/authorize?response_type=code&client_id=javaboy&redirect_uri=www.javaboy.org&scope=all
# 适用于集团内部场景,用户向客户端提供用户名和密码
密码模式:https://wx.qq.com/oauth/authorize?response_type=password&client_id=javaboy&username=%E6%B1%9F%E5%8D%97%E4%B8%80%E7%82%B9%E9%9B%A8&password=123
# 适用于开发平台API场景,客户端从平台申请 client_id 和 client_secret, 请求请直接返回token
客户端模式: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&client_id=APPID&client_secret=APPSECRET
# 相比授权码模式省略了code
简化模式: https://api.weixin.qq.com/cgi-bin/token?grant_type=token
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 授权码模式
https://zhuanlan.zhihu.com/p/347683336
1. 授权服务器 用户名+密码登录进行授权 返回token
2. 资源服务器 获取到token,拿着token去获取资源
# 第一步(网站调起下面的网址)
https://wx.qq.com/oauth/authorize?response_type=code&client_id=javaboy&redirect_uri=www.javaboy.org&scope=all
# 第二步 在上一步完成登录后会重定向code, 鉴权服务器向调用方进行回掉 服务方监听,收到进行处理
https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz
# 第三步 网站服务器收到code, 再次向鉴权服务器发送请求,鉴权服务器返回 token 信息 通过 scope 进行资源的限制
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
# 第四步 得到上一步的信息,说明登录成功,通过access_token 请求资源服务器
比如微信: 可以拿着 access_token 去获取 头像信息 可以访问的资源信息
拿到信息 判断是否注册了网站
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 密码模式
# 密码模式一般用于集团内部的权限,由于知道了密码,因此省略了用户鉴权的过程
# 第一步
http://localhost:7654/oauth/token?username=gage&password=123456&scope=all&grant_type=password&client_id=vpnbook&client_secret=xxxx
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJnYWdlIiwic2NvcGUiOlsiYWxsIl0sImV4cCI6MTY4Nzg0NzYxMywiYXV0aG9yaXRpZXMiOlsiL3YyIl0sImp0aSI6IjkzOWUwZWVkLTRiOGYtNGYwOC1hMDU4LTE5NjBhYjc1YzBhZiIsImNsaWVudF9pZCI6InZwbmJvb2siLCJlbmhhbmNlIjoiVnBuQm9vayBGbG93IEF1dGgifQ.bzG5WeG0gCKScZVNN3qMHl1kX_uTjEhF8YwYgPK12ak",
"token_type": "bearer",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJnYWdlIiwic2NvcGUiOlsiYWxsIl0sImF0aSI6IjkzOWUwZWVkLTRiOGYtNGYwOC1hMDU4LTE5NjBhYjc1YzBhZiIsImV4cCI6MTY4OTgzNDgxMywiYXV0aG9yaXRpZXMiOlsiL3YyIl0sImp0aSI6IjFkM2VhNDlmLWJmMmUtNGE4ZS1iMDVlLTJhYzZiZWZmYjNlNyIsImNsaWVudF9pZCI6InZwbmJvb2siLCJlbmhhbmNlIjoiVnBuQm9vayBGbG93IEF1dGgifQ.WLNtzfuCnNiOBXp1-6pG_UaygeeH9rcAO3x6hRS18Yg",
"expires_in": 604799,
"scope": "all",
"enhance": "VpnBook Flow Auth",
"jti": "939e0eed-4b8f-4f08-a058-1960ab75c0af"
}
# 第二步
得到上一步的信息,说明登录成功,通过access_token 请求资源服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 扩展
# 如何将oauth2.0引入集团内部产品,scope和level如何划分
目录使用 oauth2.0管理
会员等级
# 两个权限
client权限 (百度网盘授权后的权限)
1.
user权限
1. 会员等级
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 参考
# gitee
https://gitee.com/api/v5/oauth_doc#/
# 微信
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
1
2
3
4
2
3
4
上次更新: 2023-06-21 15:59:42