docs: 升级“临时 Token 认证”章节文档

This commit is contained in:
click33
2025-04-09 14:10:40 +08:00
parent 38fd28c2ab
commit fd06bfc801

View File

@@ -8,31 +8,33 @@
举个比较明显的例子:超链接邀请机制。
比如说你在一个游戏中创建一个公会 `(id=10014)`,现在你想邀请你的好朋友加入这个公会,在你点击 **`[邀请]`** 按钮时,系统为你生成一个连接:
``` xml
http://xxx.com/apply?id=10014
```
接着,你的好朋友点击这个链接,加入了你的工会。
那么系统是如何识别这个链接对应的工会是10014呢很明显我们可以观察出这个链接的尾部有个id参数值为10014这便是系统识别的关键
此时你可能眉头一紧就这么简单那我如果手动更改一下尾部的参数改成10015然后我再一点岂不是就可以偷偷加入别人的工会了
你想的没错,如果这个游戏的架构设计者采用上述方案完成功能的话,这个邀请机制就轻松的被你攻破了。
但是很明显正常的商业项目一般不会拉跨到这种地步比较常见的方案是对这个公会id做一个token映射最终你看到链接一般是这样的
``` xml
http://xxx.com/apply?token=oEwQBnglXDoGraSJdGaLooPZnGrk
```
后面那一串字母是乱打出来的目的是为了突出它的随机性使用一个随机的token来代替明文显示真正的数据。
在用户点击这个链接之后服务器便可根据这个token解析出真正公会id (10014) 至于伪造全是随机的你怎么伪造你又不知道10015会随机出一个什么样的Token
而且为了安全性这个token的有效期一般不会太长给你预留五分钟、半小时的时间足够你点击它即可
> [!NOTE| label:业务场景]
>
> 你在一个游戏中创建一个公会 `(id=10014)`,现在你想邀请你的好朋友加入这个公会,在你点击 **`[邀请]`** 按钮时,系统为你生成一个连接:
>
> ``` xml
> http://xxx.com/apply?id=10014
> ```
>
> 接着,你的好朋友点击这个链接,加入了你的工会
>
> 那么系统是如何识别这个链接对应的工会是10014呢很明显我们可以观察出这个链接的尾部有个id参数值为10014这便是系统识别的关键。
>
> 此时你可能眉头一紧就这么简单那我如果手动更改一下尾部的参数改成10015然后我再一点岂不是就可以偷偷加入别人的工会了
>
> 你想的没错,如果这个游戏的架构设计者采用上述方案完成功能的话,这个邀请机制就轻松的被你攻破了。
>
> 但是很明显正常的商业项目一般不会拉跨到这种地步比较常见的方案是对这个公会id做一个token映射最终你看到链接一般是这样的
>
> ``` xml
> http://xxx.com/apply?token=oEwQBnglXDoGraSJdGaLooPZnGrk
> ```
>
> 后面那一串字母是乱打出来的目的是为了突出它的随机性使用一个随机的token来代替明文显示真正的数据
>
> 在用户点击这个链接之后服务器便可根据这个token解析出真正公会id (10014) 至于伪造全是随机的你怎么伪造你又不知道10015会随机出一个什么样的Token
>
> 而且为了安全性这个token的有效期一般不会太长给你预留五分钟、半小时的时间足够你点击它即可。
### 2、创建临时 token