首页 > 解决方案 > Spring Boot JWT - 如何实现刷新令牌和注销 REST-API

问题描述

我们决定从Basic-Auth切换到JWT,因为存储在内存中的 session-ids 有时会导致我们的 Spring-Boot 服务器崩溃,该服务器服务于Twitter等 Android 移动应用程序。

但是对于我们的移动用例,我们有一些关于JWT的问题:

标签: springspring-bootspring-securityoauth-2.0jwt

解决方案


我会尽力回答你的问题

How long should an access token live?

您可以轻松配置到期时间,这取决于您的要求。一般来说,尽量保持简短。

How long should the refresh token live?

以上适用于刷新令牌,条件是刷新令牌通常比访问令牌寿命更长,原因很明显。

How to logout a User by invalidating his access-token and refresh token? 

这部分可能有点棘手。

您不能在创建令牌后手动使其过期。因此,您不能像使用会话那样在服务器端使用 JWT 注销。

可以实现一些选项,例如

  • 当用户执行注销操作或被入侵时。有一个黑名单来存储无效令牌,直到它们的初始到期日期。您将需要为每个请求查找数据库,但存储应该更少,因为您将存储在注销和到期时间之间的令牌。您可以通过将黑名单保存在内存而不是数据库中来提高效率。
  • 将客户端 IP 地址存储在声明对象 JWT 中。验证令牌时,您可以检查此客户端的 IP 地址是否相同。您可以根据需要对其进行细化,例如使用用户代理和客户端 IP。
  • 最糟糕的是重置用户凭据或 JWT 令牌组件以生成一个新的,它会自动使所有现有的无效。

添加一些链接以获得更深入的细节

使 JWT 令牌无效

销毁 JWT 令牌


推荐阅读