mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-10-26 18:49:01 +08:00
docs(oauth2): 新增 UnionId 描述
This commit is contained in:
@@ -149,60 +149,3 @@ public class SaOAuth2DataLoaderImpl implements SaOAuth2DataLoader {
|
||||
此种形式更加灵活,后续文档将默认按照此种形式来展示示例。
|
||||
|
||||
|
||||
### 3、自定义 openid 生成算法
|
||||
|
||||
openid 是用户在某一 client 下的唯一标识,其有如下特点:
|
||||
|
||||
- 一个用户在同一个 client 下,openid 是固定的,每次请求都会返回相同的值。
|
||||
- 一个用户在不同的 client 下,openid 是不同的,会返回不同的值。
|
||||
|
||||
oauth2-client 在每次授权时可根据返回的 openid 值来确定用户身份。
|
||||
|
||||
框架默认的 openid 生成算法为:
|
||||
``` java
|
||||
md5(prefix + "_" + clientId + "_" + loginId);
|
||||
```
|
||||
|
||||
其中的 prefix 前缀默认值为:`openid_default_digest_prefix`,你可以通过以下方式配置:
|
||||
|
||||
<!---------------------------- tabs:start ---------------------------->
|
||||
<!------------- tab:yaml 风格 ------------->
|
||||
``` yaml
|
||||
# sa-token配置
|
||||
sa-token:
|
||||
oauth2-server:
|
||||
# 默认 openid 生成算法中使用的摘要前缀
|
||||
openid-digest-prefix: xxxxxx
|
||||
```
|
||||
<!------------- tab:properties 风格 ------------->
|
||||
``` properties
|
||||
# 默认 openid 生成算法中使用的摘要前缀
|
||||
sa-token.oauth2-server.openid-digest-prefix=xxxxxx
|
||||
```
|
||||
<!---------------------------- tabs:end ---------------------------->
|
||||
|
||||
正常来讲,openid 算法需要保证:
|
||||
|
||||
1. 单个 clientId 下同一 loginId 生成的 `openid` 一致。[必须]
|
||||
2. 多个 clientId 下同一 loginId 生成的 `openid` 不一致。[非常建议]
|
||||
3. 客户端无法通过 clientId + loginId 推测 `openid` 值。[建议]
|
||||
4. 客户端无法通过 clientId + loginId + openid 推测该 loginId 在其它 clientId 下的 `openid` 值。[建议]
|
||||
5. oauth2-server 自身由 `openid` 可以反查出对应的 clientId 和 loginId。[根据业务需求而定是否满足]
|
||||
|
||||
框架内置的算法,可以满足 1和2,如果自定义了 `sa-token.oauth2-server.openid-digest-prefix` 配置,可以满足3。
|
||||
|
||||
如果自定义配置的 prefix 长度较短,或比较简单呈现规律性,则有客户端根据 clientId + loginId + openid 穷举爆破出 `prefix` 的风险,
|
||||
从而获得提前计算彩虹表来推测出其它 clientId、loginId 对应 openid 值的能力。
|
||||
|
||||
如果自定义的 prefix 前缀比较复杂,让客户端无法爆破,则可以满足4。但依然无法满足5。
|
||||
|
||||
所以 openid 算法的最优解,应该是 oauth2-server 采用随机字符串作为 openid,然后自建数据库表来维护其映射关系,这样可以同时满足12345。
|
||||
|
||||
表结构参考如下:
|
||||
|
||||
- id:数据id,主键。
|
||||
- client_id:应用id。
|
||||
- user_id:用户账号id。
|
||||
- openid:对应的 openid 值,随机字符串。
|
||||
- create_time:数据创建时间。
|
||||
- xxx:其它需要扩展的字段。
|
||||
|
||||
Reference in New Issue
Block a user