jwt访问令牌存储在spring boot中的哪里?

Posted

技术标签:

【中文标题】jwt访问令牌存储在spring boot中的哪里?【英文标题】:Where jwt access token is stored in spring boot? 【发布时间】:2021-03-12 11:55:06 【问题描述】:

大家好

我正在开发带有 jwt 身份验证和 spring 安全性的 spring boot 项目, 我可以获得访问令牌,但有一个大问题。 它是 访问令牌准确存储在哪里? 我的意思是(内存数据库,缓存或其他东西)

谢谢

【问题讨论】:

它没有存储在某个地方,客户端的任务是在授权标头中将它与请求一起发送。 否,但是我随请求一起发送的令牌在哪里得到验证它是真的 在 Spring Security 过滤器代码中 - 如果您将其配置为这样做。如果您想知道它是如何工作的,那么记录的过程就很好......请阅读 Spring Security 文档。 【参考方案1】:

默认存储in-memory。

客户

如果您是 OAuth 2.0 客户端,您可以使用 the @RegisteredOAuth2AuthorizedClient annotation 在控制器中检索令牌,如下所示:

@GetMapping("/data")
public String data(@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient client) 
    String accessToken = client.getAccessToken().getTokenValue();
    // ...

或者,如果您在服务层需要它,那么您可以从OAuth2AuthorizedClientService 中检索它。

但请注意,如果您需要访问令牌以便将其传播到下游,您可以改为 configure the WebClient with Client's ExchangeFilterFunction,它将为您查找、刷新和传播令牌。

资源服务器

如果您是 OAuth 2.0 资源服务器,则可以直接从 Authentication 检索它。

这就是in the controller 的样子:

@GetMapping("/data")
public String data(@AuthenticationPrincipal Jwt jwt) 
    String accessToken = jwt.getTokenValue();
    // ...

但请注意,如果您需要访问令牌以便将其传播到下游,您可以改为 configure the WebClient with Resource Server's ExchangeFilterFunction,它将为您查找和传播令牌。

【讨论】:

以上是关于jwt访问令牌存储在spring boot中的哪里?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jwt 公钥在 Spring Boot 中验证承载访问令牌

在spring boot微服务中设置JWT令牌生成中的两个主题

从 Spring Boot Rest Controller 访问 JWT 令牌

在 Django REST 框架中使用 JWT 时,刷新令牌和访问令牌存储在哪里?

带有加密 JWT 访问令牌的 Spring Boot OAuth2

Spring Boot 安全性 - 允许使用过期 JWT 令牌的用户请求