登出/使JWT失效

15
我正在使用Azure移动服务中的自定义身份验证,通过在自定义登录API中生成JWT(JSON Web Token)来实现。一旦用户获得JWT,则其有效期将持续到编码过期时间到达。
除了在每个经过身份验证的请求上明确检查会话表中的JWT令牌之外,是否有一种方法可以在其到期时间之前使JWT令牌无效(就像用户注销时发生的那样),以便在任何将该令牌作为值传递给X-ZUMO-AUTH标头的表API或自定义API脚本中都不会访问到?

3
这个相关问题中有很好的替代方案讨论:https://dev59.com/VWEh5IYBdhLWcg3w0WVP - Travis Terry
4个回答

13

不完全正确。当用户在客户端中退出登录时,它使用的JWT并没有被真正地作废——它只是从客户端内存中移除了(例如,请参阅托管SDK上的代码)。JWT验证是通过将其签名与移动服务的主密钥进行比较来完成的,除非更改此密钥(这将使您服务的所有JWT令牌无效,我认为这不是您想要的),否则该令牌将在过期之前保持有效。

由于您自己生成JWT,因此可以考虑使用较短的过期时间,这可能有助于您的情况。

您还可以在移动服务反馈论坛中建议此功能。有一个相关的功能建议,我已经创建了一个,您也可以考虑添加评论并投票支持它。(链接)


1
Azure反馈论坛中移动应用程序(以前是移动服务)的链接现在已经失效。除此之外,我也找不到您的建议了。 - Sascha Gottfried

1

将令牌和其到期日期存储在一个黑名单数据库表/集合中。

将未过期的黑名单令牌加载到内存中(索引),并检查每个请求的令牌是否在其中。

设置一个间隔时间,定期重新加载黑名单(从内存中删除已过期的令牌)。


0
不,登出用户并使JWT令牌失效的唯一方法是将其从会话表中删除。这就是你已经在做的方式。

0
为了支持JWT失效(总会有原因的):
我最终选择存储每个用户的唯一字符串,并将其与全局公共字符串进行哈希,以便根据需要使单个用户的令牌无效或使所有令牌无效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接