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

时间:2017-09-04 15:29:09

标签: c++ mysql cpprest-sdk

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

  

[不重要]

当我使用REST API以便我可以使用网络界面,桌面应用程序,Android应用程序......时,这是一个好主意还是坏主意?但它不会成为一个公共功能"!可能稍后。

1 个答案:

答案 0 :(得分:0)

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

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

要验证其Web令牌,您需要加密其用户ID并检查它是否与访问令牌匹配(或者您解密访问令牌并检查它是否与用户ID匹配)。

只要您创建一个真正随机的加密密钥,并保密,您的安全性应仅依赖于底层加密算法的安全性。

这里的主要缺点是所涉及的值是固定的Web令牌,因此如果其他人“嗅探”用户的数据包,他们可以使用回放攻击 - 也就是说,他们可以使用相同的密钥验证他们的请求。真正的用户。有一些方法可以防止这种情况,但是(除非你使用大多数预先构建的“东西”来实现它),它们会变得更加复杂。

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