当前位置: 首页 > 知识库问答 >
问题:

我应该/可以如何在redis中存储我的JWT令牌,以便我可以看到当前的用户会话?

孙永思
2023-03-14

我自己想了一个实现,但觉得有点过头了,而且笨重?

  1. 我将使用用户ID作为密钥
  2. Id然后在value部分中存储JWT令牌的hashmap。

示例

    null
    null

这意味着在每个对受保护的apiendpoint的请求中,我必须按userId进行搜索,反序列化hashmap,循环遍历hashmap并尝试匹配在头中发送的JWT。这看起来像是一个很大的工作?还有别的办法吗?

如果一个用户想要注销,那么这个过程将非常类似于再次登录,除了第4点之外。我会从hashmap中删除JWT,然后保存它。

目前,我只是将JWT令牌存储为键,并在受保护的apiendpoint上执行一个简单的jedis.get(requestHeader.JWT)。如果有一种查询值而不是键的方法,那么这将是理想的,因为我可以将键存储为JWT,将userId存储为值。

例如:

final String token = authHeader.substring(7); // The part after "Bearer "
 try {
      final Claims claims = Jwts.parser().setSigningKey("${secret}")
           .parseClaimsJws(token).getBody();
            request.setAttribute("claims", claims);
            request.setAttribute("token", token);
 } catch (final SignatureException e)  { throw new ServletException("Invalid token."); }

if (redisClient.get(token) == null) throw new ServletException("Invalid or expired token.");

共有1个答案

麻和雅
2023-03-14

您可以通过以下步骤对API使用jwt:

>

  • 用户登录->创建过期JWT。
  • 用户注销->在Redis中保存无效令牌。
  • 当用户调用api时->检查JWT:

    • 如果有效令牌且不在Redis中无效令牌=>身份验证
    • 如果不无效或属于Redis无效令牌=>取消身份验证

  •  类似资料:
    • 问题内容: 我正在使用ExpressJS,Mongodb(Mogoose)构建应用程序。应用程序包含访问用户之前必须对其进行身份验证的路由。 目前,我已经编写了一个快速的中间件来做同样的事情。在这里,借助JWT令牌,我正在进行mongodb查询以检查用户是否已通过身份验证。但是感觉这可能会在我的数据库上增加不必要的请求负载。 我应该针对此特定任务集成redis吗? 会改善API性能吗?还是应该继续

    • 我正在使用vue.js和vuex开发一个应用程序,它使用JWT令牌对JSON API服务器进行身份验证。所以我想知道存放JWT代币的最佳做法是什么? 如果我将其存储在vuex商店中,则页面刷新后它会丢失,因此用户需要再次登录,这不是很方便。 如果我将其存储在浏览器的本地存储中,它会在下次登录之前被弃用,然后假设身份验证令牌的组件会混淆。我不知道如何处理这个问题。 感谢你对此的暗示。

    • 在我的php脚本中,我有一个简单的username/email exists条件,但是我想把这个错误(如果存在的话)放在html的某个地方,这样我就可以设置它的样式并将它放置在我的表单上。Echo只是把它放在左上角。我该怎么做?设置变量似乎不是最佳解决方案。

    • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能的重复项: MySQL中的图像在MySQL中 存储图像 我正在尝试建立一个网站,供用户在注册时上传其图像。我希望对于每个图像,都应该有一个用PHP创建的缩略图(这并不困难)。我想将拇指(因为它们很小)保存在数据库中,并且使用MySQL。(我不想将拇指另存为驱动器上的物理文件。) MySQL是否允许保存和检索图像数据,我该如何处理?如果它

    • 我已经为我的应用程序准备了Spring Security Cookie机制,现在只为API准备了,我需要添加基于JWT令牌的身份验证机制。我使用Spring Security的MultiHttpSecurityConfiguration和两个嵌套类。 是否应该将会话和JWT令牌机制一起包含在一个应用程序中,这是一个完全不同的问题,我需要实现两件事。 null JWTauthenticationTo