我是JWT的新手,我想知道当用户退出应用程序时是否可以在服务器端使JWT无效/无效(我也想知道这样做是否有意义!) 。想法是:
我不确定这是否是一种非常规的注销逻辑方法,或者即使用户注销后也不确定是否仅让JWT保留有效就可以接受(我想我可以缩短JWT的寿命)到期,例如60分钟左右。
再说一遍:想知道是否有可能使用JJWT进行这种“无效”操作(如果可以,怎么办!!),以及这样做是否有意义(如果没有,典型的登出方式是什么)流的样子?!)。谢谢!
答案 0 :(得分:1)
您不会使JWT失效,JWT是不可变的。令牌的有效性取决于到期时间和签名密钥,在严重的安全事件中,您可以更改签名密钥,然后已经发行的令牌将失效。您也可以在数据库中使用令牌黑名单,但这将花费另一次访问数据库的时间,如果使用此方法,则身份验证流程将不再是无状态的。
一旦用户退出,则必须从存储令牌的客户端删除令牌,通常令牌的存储是浏览器的cookie
或localStorage
。
答案 1 :(得分:1)
其他答案是正确的,因为您通常不需要注销/无效端点。从应用程序中注销的用户意味着您只需从本地存储中删除其令牌即可。
但是,如果仍然确定要实现令牌失效端点,则可以通过跟踪包含无效令牌ID的“黑名单”来实现:
time-to-live
至少与令牌的有效期限一样长。 对于该实现,您不一定需要DB,您可以使用内存自到期映射(例如f.i)。 guava's CacheBuilder或this thread中讨论的替代方法之一。
答案 2 :(得分:0)
这是JWT的核心缺点之一-它们是自包含的令牌,这意味着没有固有的方法可以使它们无效。至多,您可以创建令牌ID(UUID.randomUUID()
)并尝试维护吊销列表,但是您又回到了JWT应该能够解放您的大部分基础设施的需求。