我目前正在REST API
为我的 Web 服务开发一个。每个注册的用户都必须有一个单独的 API 访问令牌,但是我如何生成一个,而不检查每个令牌是否与新令牌相同?
[不重要]
当我将使用 REST API 以便我可以使用 Web 界面、桌面应用程序、Android 应用程序......时,这是一个好主意还是坏主意?但它不会是“公共功能”!可能以后。
我目前正在REST API
为我的 Web 服务开发一个。每个注册的用户都必须有一个单独的 API 访问令牌,但是我如何生成一个,而不检查每个令牌是否与新令牌相同?
[不重要]
当我将使用 REST API 以便我可以使用 Web 界面、桌面应用程序、Android 应用程序......时,这是一个好主意还是坏主意?但它不会是“公共功能”!可能以后。
如果由我决定,我会发布递增的数字作为用户 ID。然后我会使用 256 位 AES 之类的东西来加密该用户 ID。
然后我可能会让用户包含一个JSON Web 令牌,其中包含他们的用户 ID 和他们的访问令牌——加密的 ID。
要验证他们的 Web 令牌,您可以加密他们的用户 ID 并检查它是否与访问令牌匹配(或者您解密访问令牌并检查它是否与用户 ID 匹配)。
只要您创建一个真正随机的加密密钥并对其保密,您的安全性就应该只取决于底层加密算法的安全性。
这里的主要弱点是所涉及的值是一个固定的网络令牌,所以如果其他人“嗅探”用户的数据包,他们可以使用回放攻击——也就是说,他们可以使用与真实用户相同的密钥来验证他们的请求. 有一些方法可以防止这种情况发生,但是(除非您主要使用预先构建的“东西”来实现它)它们变得相当复杂。
可能最简单的“增强”协议不仅使用用户 ID,而且(例如)会话 ID 和数据包 ID(两者都增加),将三者连接在一起并加密。然后每个数据包都会有一个唯一的加密值来验证。