存储令牌以访问 Spring Boot 上的其他应用程序

ren*_*nke 5 spring-security spring-boot

我在 Spring Boot 中有一个 Rest 应用程序,配置了安全性并为其公开的服务实现了 JWT 令牌。但该应用程序还连接到其他第三方应用程序,这些应用程序也使用 JWT 进行保护,并且每个应用程序使用不同的令牌。

我的问题是:存储这些第三方代币的最佳策略是什么?是否有类似SecurityContextHolder, 但用于存储应用程序用于在其他服务上进行身份验证的令牌?

小智 0

在配置您的

OAuth2RestOperations restTemplate
Run Code Online (Sandbox Code Playgroud)

您可以将令牌保留在客户端中

public OAuth2RestOperations restTemplate() {
    OAuth2RestTemplate template = new OAuth2RestTemplate(resource(), new 
    DefaultOAuth2ClientContext(accessTokenRequest));
    AccessTokenProviderChain provider = new 
    AccessTokenProviderChain(Arrays.asList(new AuthorizationCodeAccessTokenProvider()));
    provider.setClientTokenServices(clientTokenServices());
    return template;
}
Run Code Online (Sandbox Code Playgroud)

正如 spring security oauth 文档中所述

在客户端中保留令牌

客户端不需要保留令牌,但对于用户来说,每次重新启动客户端应用程序时不需要批准新的令牌授予可能会很好。ClientTokenServices 接口定义了为特定用户保留 OAuth 2.0 令牌所需的操作。提供了 JDBC 实现,但如果您愿意实现自己的服务,用于将访问令牌和关联的身份验证实例存储在持久数据库中,您也可以这样做。如果您想使用此功能,您需要向 OAuth2RestTemplate 提供专门配置的 TokenProvider