JWT使用数据库处理到期日期
最近我一直在考虑同样的问题,并想知道我的令牌解决方案是否存在重大缺陷:
在JWT验证期间,如果过期已过,则将从服务器返回“已过期”响应(例如,401 w /体内的“过期”)。 当客户端收到这个状态时,它应该启动一个刷新过程,该过程为新的过期的令牌进行交易。
服务器上的刷新端点应使用过期令牌并执行以下操作:
在任何这些步骤失败后,应将未经授权的错误发送给客户端,然后再重新登录。
为了防止发行令牌永无止境地累积,我们可以为issuedTokens集合中的令牌设置一个TTL。 在需要再次登录之前,将TTL值设置为登录应激活的时间量。
除非您不断尝试刷新已过期的令牌,否则此方法不会触及数据库。 在这种情况下,您可以使用缓存的失败令牌黑名单。 如果作为缓存层处理,它可以位于应用程序本身旁边。
这绝对只是我即将进行测试的一项正在开发的解决方案。 让我知道你的想法。
我用这种方法看到了几个问题。 首先,如果我能够窃取任何人的JWT令牌,我可以通过调用您的端点来保留新的JWT令牌。
例如,OAuth2通过要求客户端在使用刷新令牌时发送客户端凭据来减轻这一点。 一些公共客户端的库在客户端和授权服务器(而不是资源(API)服务器)之间使用会话cookie来更新令牌。
另一个问题当然是收集所有JWT令牌,这就像一个凭证数据库。 如果有人设法盗取这些信息,他们可以以任何用户身份访问您的应用程序。
使用自己的身份验证机制很难获得正确的,因此非常危险。
链接地址: http://www.djcxy.com/p/22023.html