JWT使用数据库处理到期日期

最近我一直在考虑同样的问题,并想知道我的令牌解决方案是否存在重大缺陷:

  • 将到期时间设置为较低值(〜15分钟)
  • 每个生成的JWT也会被添加到每个用户的“issuedTokens”集合/表中
  • 在JWT验证期间,如果过期已过,则将从服务器返回“已过期”响应(例如,401 w /体内的“过期”)。 当客户端收到这个状态时,它应该启动一个刷新过程,该过程为新的过期的令牌进行交易。

    服务器上的刷新端点应使用过期令牌并执行以下操作:

  • 验证令牌(过期除外)
  • 检索用户标识并检查标记是否在其issuedTokens集合中
  • 发布新的智威汤逊
  • 从集合中删除已过期的标记并添加新的标记
  • 在任何这些步骤失败后,应将未经授权的错误发送给客户端,然后再重新登录。

    为了防止发行令牌永无止境地累积,我们可以为issuedTokens集合中的令牌设置一个TTL。 在需要再次登录之前,将TTL值设置为登录应激活的时间量。

    除非您不断尝试刷新已过期的令牌,否则此方法不会触及数据库。 在这种情况下,您可以使用缓存的失败令牌黑名单。 如果作为缓存层处理,它可以位于应用程序本身旁边。

    这绝对只是我即将进行测试的一项正在开发的解决方案。 让我知道你的想法。


    我用这种方法看到了几个问题。 首先,如果我能够窃取任何人的JWT令牌,我可以通过调用您的端点来保留新的JWT令牌。

    例如,OAuth2通过要求客户端在使用刷新令牌时发送客户端凭据来减轻这一点。 一些公共客户端的库在客户端和授权服务器(而不是资源(API)服务器)之间使用会话cookie来更新令牌。

    另一个问题当然是收集所有JWT令牌,这就像一个凭证数据库。 如果有人设法盗取这些信息,他们可以以任何用户身份访问您的应用程序。

    使用自己的身份验证机制很难获得正确的,因此非常危险。

    链接地址: http://www.djcxy.com/p/22023.html

    上一篇: JWT handling expiration with a database

    下一篇: side handling of JWT tokens