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 时,刷新令牌和访问令牌存储在哪里?