gpt4 book ai didi

spring - 在 Spring 应用程序中注销时删除 JWT

转载 作者:行者123 更新时间:2023-12-03 18:14:36 26 4
gpt4 key购买 nike

我们正在尝试为基于 Spring REST 的应用程序遵循此代码库。
spring-boot-jwts

问题是我们无法在从服务器注销期间删除 JWT token 。当我们在网上检查时,我们才知道唯一的方法是将 JWT token 列入黑名单,如 Blacklisting 所示。 .是这样吗?

我们对基于 token 的身份验证有点陌生,请告诉我们是否有解决方案,例如在注销调用时使 token 过期等。

最佳答案

长话short ,您必须建立一种机制来删除或使 token 无效 manually登出时。

我应该存储 JWT token 吗?

你应该问自己的问题是

  • 我需要将 JWT token 存储在数据库中吗?如果是这样,为什么?

  • 以上问题不一定能解决您的 logout问题是因为,您仍然需要一种机制来 invalidate存储或未存储在 database 中的 token .
    not storing的好处之一数据库里的token就是你不用担心 deleting他们什么时候(没有维护或一些清理过程)
  • 他们 token 过期
  • 他们的范围发生变化
  • 用户(在 password 流的情况下,我们不包括其他 flows )角色和权限在数据库中降级或升级,因此,jwt 中的内容已过时
  • 用户被删除
  • 用户退出(想知道这是否是删除 token 的充分理由)
  • token 被泄露(棘手的一个)
  • [添加其他案例]

  • 验证 token 的有效性?

    我确定您正在使用 verify端点,其目的是验证 token 是否为 valid与否 但是,不需要检查上述所有情况,这意味着您必须要么
  • 定制 verify添加更多的工作流程 custom checks
  • 在 token 被 verified 之前为 signature validity , expiry time ,以及其他一些 default checks您可以自己运行 custom checks如果您的 custom checks通过然后继续否则 you shall not pass!

  • 那你有什么选择?

    嗯,除了 blacklisting你可以做一些如下

    使用内存存储

    只需存储 uniquely-identifying-metadata将 JWT token 作为 key 存入 redis 并给它一个 expiry timeJWT 相同 token 到期时间使其 self-destruct当 token 过期时。
    set key {replace_with_jwt_unique_identifier} ex {jwt_expiry_timestamp}

    风险 : Redis 是内存存储,条目不会持久化。

    使用数据库

    不要使用Redis或不想冒险。您可以将数据库与自定义数据库表一起使用。一个单独的表,要么
  • 与 JWT 记录相关并有一个 ON DELETE CASCADE
  • 与JWT记录无关,需要自己维护

  • 当发出 token 时,也会填充这个新的数据库表。

    常见的剩余步骤

    normal请求带有 JWT,使用 JWT 查询 in-memory商店或 database表以查看记录是否存在。
    如果是 in-memory存储一个简单的 existence检查绰绰有余。
    如果是 database table你需要做更多的检查(即存在和未过期等),如果检查通过让请求通过,否则 you shall not pass!
    logout request进来,万一 in-memory商店只需删除 key并继续(如果找到),如果是 database你可以删除 JWT将级联到新表的记录。

    什么时候做海关检查?

    嗯,你可以做到
  • 首先也是最重要的是使用自定义顶级过滤器或
  • 您可以展开verify端点工作流也进行这些额外检查

  • 我使用的项目不需要 token 在 logout 上失效。所以我不必过这座桥。我确实必须扩展 verify端点以确保 token 有效,如果我所有 custom checks已经通过。

    额外的阅读 Material

    除了你指出的教程。还有一些其他 SO 问题也讨论了类似的问题。看

    What if JWT is stolen?
    How to destroy JWT on logout?
    More how to delete a JWT token?
    How to invlidate JWT when password changed
    Github issue - how to invalidate JWT
    Finally the best for the last - Invalidating JWT Web Tokens

    关于spring - 在 Spring 应用程序中注销时删除 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48890830/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com