我是 JWT 的新手,想知道当用户退出应用程序时是否可以在服务器端使 JWT 失效/作废(我也想知道它是否有意义 这样做!)。思路是:
- 用户点击其应用中的注销链接
- 应用调用
POST https://api.myapp.example.com/auth/invalidate
- JWT(它是 HTTP 请求 header 中的授权/不记名 token )以某种方式失效
- 现在,再也没有人可以使用那个 JWT
我不确定这是否是一种非正统的注销逻辑方法,或者即使在用户注销之后让 JWT 仍然有效是否可以接受(我想我可以缩短 JWT 的生命周期过期到,比如说,60 分钟之类的)。
再说一次:想知道是否可以使用(如果可以,怎么做?!)进行这种“无效”,以及它是否有意义这样做(如果不是,典型的注销流程是什么样的?!)。谢谢!
最佳答案
除了 token 到期日期(在 exp
声明中说明)之外,我可以想到几种使 JWT token 无效的方法:
更改 key
第一种方法需要更改用于在服务器端签署 token 的 key ,但对于您问题中描述的情况似乎不切实际。
将 token 标识符列入白名单
另一种方法(可能是更适合您的方法)涉及在服务器端的白名单中跟踪 token 。
颁发 token 时,使用
jti
声称在 token 中存储唯一标识符。同时将此唯一标识符添加到服务器端的白名单中。验证 token 时(除了检查签名、到期日期和其他您可能需要的声明),确保
jti
的值声明已列入白名单。当用户请求使 token 失效时,从白名单中删除 token 标识符。
对于 token 标识符,您可以使用 UUID
JWT 允许您执行无状态身份验证(一旦您验证了签名,您就可以信任 token ,然后在不依赖于外部实体的情况下执行身份验证)。白名单方法是一种权衡,以防您需要跟踪已发行的代币。
关于security - 注销时使 JWT 失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148876/