我如何为用户生成个人访问令牌?

how can i generate an individual access token for users?

我目前正在为我的 Web 服务开发 REST API。每个注册的用户都必须拥有 API 的个人访问令牌,但是我如何生成一个,而不检查每个令牌是否与新令牌相同?

[Not important]

当我使用 REST API 以便我可以使用 Web 界面、桌面应用程序、Android 应用程序时,这是个好主意还是坏主意?但它不会是 "public feature"!可能以后。

如果由我决定,我会发布递增的数字作为用户 ID。然后我会使用类似 256 位 AES 的东西来加密该用户 ID。

然后我可能会让用户包含一个 JSON web token,其中包含他们的用户 ID 和访问令牌——加密的 ID。

为了验证他们的网络令牌,您加密他们的用户 ID 并检查它是否与访问令牌匹配(或者您解密访问令牌并检查它是否与用户 ID 匹配)。

只要您创建一个真正随机的加密密钥,并将其保密,您的安全性就应该仅取决于底层加密算法的安全性。

这里的主要弱点是涉及的值是一个固定的网络令牌,所以如果其他人 "sniffs" 用户的数据包,他们可以使用回放攻击——也就是说,他们可以验证他们的请求使用与真实用户相同的密钥。有一些方法可以防止这种情况发生,但是(除非你主要使用预构建的 "stuff" 来实现它)它们变得相当复杂。

可能最简单的 "enhanced" 协议不仅使用用户 ID,而且(例如)会话 ID 和数据包 ID(两者都递增),将三者连接在一起并对其进行加密。然后每个数据包都会有一个唯一的加密值来验证。