java - JJWT 可以在服务器端使令牌无效吗?
问题描述
我是 JWT 的新手,想知道当用户退出应用程序时是否可以在服务器端使 JWT 无效/无效(我也想知道这样做是否有意义!)。想法是:
- 用户在其应用中单击退出链接
- 应用程序调用 POST https://api.myapp.example.com/auth/invalidate
- JWT(它是 HTTP 请求标头中的授权/承载令牌)以某种方式无效
- 现在,没有人可以再次使用那个 JWT
我不确定这是否是一种非正统的注销逻辑方法,或者即使在用户注销之后,让 JWT 仍然有效是否可以接受(我想我可以将 JWT 的有效期缩短到,比如说,60 分钟或其他时间)。
再说一遍:想知道是否可以使用 JJWT 进行这种“无效”(如果可以,怎么做?!)以及这样做是否有意义(如果没有,典型的注销流程是什么样的?!)。谢谢!
解决方案
您不会使 JWT 无效,JWT 是不可变的。令牌的有效性取决于到期时间和签名密钥,在严重的安全事件中,您可以更改签名密钥,然后已经颁发的令牌将失效。您也可以在数据库中使用令牌黑名单,但这将花费另一次访问数据库的费用,如果您使用它,身份验证流程将不再是无状态的。
一旦用户退出,则必须从存储令牌的客户端删除令牌,通常令牌的存储是浏览器的一个cookie
或一个。localStorage
推荐阅读
- python - 用于集群的 Python 索引名称的弹性搜索客户端?
- python - newsplease commoncrawl.py 文件中的异常
- python - 'tracks.$$$' 中的美元 ($) 前缀字段 '$$$' 对存储无效
- javascript - 禁止在 chrome 浏览器中查看源代码
- javascript - React - 如何将对象作为字段附加到 FormData
- python - 在 CouchDB 数据模型中存储日期时间
- postgresql - 在客户端处理数据与在服务器上处理数据的限制
- c# - 如果其内容包含我的搜索词,如何在字符串数组中查找元素
- php - 选择给定字符串是 MySQL/PHP 中特定列的子字符串的所有条目
- amazon-ec2 - 用户数据命令在 Ubuntu 上不执行