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中的哪里?的主要内容,如果未能解决你的问题,请参考以下文章