参考令牌生成最佳实践

Posted

技术标签:

【中文标题】参考令牌生成最佳实践【英文标题】:Reference token generation best practices 【发布时间】:2017-04-06 05:36:37 【问题描述】:

我为我的 nodejs 项目实现了 JWT 令牌,但对撤销令牌的需求使我切换到引用不记名令牌以完全控制令牌生命周期。根据我的项目要求:

    令牌必须比自我描述的 JWT 令牌短。 必须有某种方法来确保服务器发出令牌(如 JWT 中的 hs256 验证),但由于引用令牌中没有有效负载部分,因此情况变得更加复杂。

实现安全、不可猜测的引用令牌的最佳做法是什么?

【问题讨论】:

【参考方案1】:

不透明的令牌只是一个随机字符串,它在服务器中映射到经过身份验证的用户名。看看https://security.stackexchange.com/questions/19676/token-based-authentication-securing-the-token

只要攻击者不能以不可忽略的概率创建有效令牌,这样的令牌就足够安全了,“有效令牌”是“已发出令牌数据库中的令牌”。令牌值的长度至少 16 个字节并使用加密强 PRNG 生成就足够了

为了减少服务器存储要求,令牌可以包含用户名和颁发日期,并使用 HMAC 私钥加密,以便服务器验证真实性。

最后一个解决方案非常接近 JWT。使用 JWT,您还可以使用 黑名单 标记无效令牌,将其存储到过期时间并在每个请求中检查它。 (黑名单打破了 JWT 的无状态,因为它需要维护状态)

【讨论】:

以上是关于参考令牌生成最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

生成 OAuth 令牌的最佳实践?

为忘记密码生成随机令牌的最佳实践

使用 Keycloak 时模拟“生成 API 令牌”的最佳实践

同时从移动设备和 Web 刷新 JWT 令牌的最佳实践

在 iOS 中保存访问令牌的最佳实践

SessionId/Authentication Token 生成的最佳实践