在永久存储中跟踪 JWT

Posted

技术标签:

【中文标题】在永久存储中跟踪 JWT【英文标题】:Keeping Track of JWT in a permanent storage 【发布时间】:2021-03-15 21:53:32 【问题描述】:

我在 Spring Boot 中有一个身份验证服务,它发出/验证 JWT。用户传入用户名/密码,服务对其进行验证,并返回访问令牌和刷新令牌作为响应。以下是我希望在这项服务中获得的一些东西:

    我想确保用户只能使用一次相同的刷新令牌来获取新的访问令牌,并确保刷新令牌在使用后过期。

    我想清理过期的访问权限并在令牌过期后刷新它们。为此,我需要一个存储来跟踪我发布的所有 JWT 令牌和到期日期。

这会被推荐吗?如果是这样,在这种情况下最适合的存储是什么?我正在查看 AWS Key Management Service,但不确定是否有更好的选择。

任何帮助将不胜感激!谢谢。

【问题讨论】:

【参考方案1】:

不,密钥管理服务完全不适合这个。您根本不能为此使用此服务,这里没有真正的考虑,该服务做的是完全不同的事情。此处可能使用 KMS 的唯一方法是签名并验证 JWT。

您要使用的是 DynamoDB 并将刷新令牌存储在那里。如果用户使用刷新令牌,您检查 DynamoDB 中的令牌,删除它,对其采取行动,并可能发出并保存一个新令牌。您可以可能在令牌上添加一个 TTL 以自动删除过期令牌,但您不能依赖该 TTL 工作。

JWT 具有内置的过期时间,如果达到该过期日期,它们就会过期。它们不应存储在后端的任何位置。

【讨论】:

感谢您的回复!我肯定会为此使用 DynamoDB。我正在考虑将发布的 JWT 存储在某个地方的存储中(如果可能的话,可能是 DynamoDB),但我想这样做不是一个好习惯?我只想定期清除所有过期的令牌(访问令牌、刷新令牌)。 @louprogramming 如果您在存储的令牌上设置了 TTL,则无需手动清除它们。 我明白了。我已经为每个令牌设置了到期日期(用于访问和刷新)。我想这通常就足够了吗? @louprogramming 是的,如果格式正确,您可以在 dynamodb 中为其设置 TTL 标志:docs.aws.amazon.com/amazondynamodb/latest/developerguide/… - 否则您可以在逻辑上添加具有相同值的第二列,但在符合 ttl 的格式。 谢谢!我正在与我的一位团队成员谈论它,有人建议我们希望将 JWT 与每个特定用户相关联,这样当我们刷新令牌时,我们只想用特定的用户信息更新该行,而不是为每个刷新令牌。在这种情况下使用永久存储是否有意义?还是仍然不适用?

以上是关于在永久存储中跟踪 JWT的主要内容,如果未能解决你的问题,请参考以下文章

永久排除某些跟踪文件

Angular - 存储永久用户信息的位置(本地存储除外)

如何跟踪模型变化 nodejspostgresql

在SQLSERVER里面,如何写一个存储过程来创建跟踪?

在 git 中跟踪推送到新存储库

在网站上存储/跟踪用户活动 [关闭]