想象一下,您正在运行一个实现 OAuth 2.0 流程的服务,以允许您的最终用户登录到 3rd 方应用程序,并授权这些应用程序通过某些 API 使用您的服务数据。
通过您的 OAuth 流成功验证第 3 方应用程序后,您的服务会向第 3 方应用程序发送一个不记名令牌,用于验证(并授权)第 3 方应用程序(代表最终用户)使用您的服务的 API。
这样的不记名令牌需要存储在您的服务器上,以便对传入的 API 调用执行身份验证。由于不记名令牌对客户端进行身份验证(和授权),因此您需要安全地存储它,就像存储密码一样。
然而,虽然密码在保存到磁盘之前会被加盐 + 散列,但它们也会通过相应的主体(用户名/电子邮件地址)而不是通过密码的安全表示来查找。
在不记名令牌的情况下,没有用于查找匹配凭证/令牌的主体。假设您要存储不记名令牌,如密码(加盐+散列),您必须查找所有可能的盐,应用每个盐,然后散列加盐令牌,然后检查它是否存在于系统中的任何位置。那不成比例。
所以我的问题是:如何在服务器上安全地存储不记名令牌?也就是说,无需在需要验证令牌时生成所有可能的安全表示。
“安全存储不记名令牌”是指获得所有“安全存储”不记名令牌文件的攻击者将无法使用它们。