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

大家好

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

谢谢

【问题讨论】:

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

标签: spring spring-boot 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,它将为您查找和传播令牌。

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 2017-01-21
    • 2016-03-15
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2018-11-10
    • 2020-11-22
    • 2019-04-25
    相关资源
    最近更新 更多