【问题标题】:how can i generate an individual access token for users?如何为用户生成个人访问令牌?
【发布时间】:2017-09-04 15:29:09
【问题描述】:

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

[不重要]

当我将使用 REST API 以便我可以使用 Web 界面、桌面应用程序、Android 应用程序......时,这是一个好主意还是坏主意?但它不会是“公共功能”!以后可能会。

【问题讨论】:

  • uuid?
  • @Amadeus 我认为 UUID 不够安全。哦...每个用户都有一个 ID(mysql 增量)

标签: c++ mysql cpprest-sdk


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 所以你的意思是,简单地说...我有类似加密密钥的东西(没有人会拥有它)...我会将用户 ID 编码为 Accesstoken...这是正确的吗?
  • 是的,就是这个意思。
  • OK... 我必须为所有用户提供一个加密密钥吗?还是为每个用户一个?
  • 您可以为所有用户使用相同的加密密钥。
  • 好的...这不是性能密集型的吗?那么哈希呢?
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 2016-03-22
  • 2019-08-19
  • 2019-09-10
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
相关资源
最近更新 更多