我有两项服务:
spring-security-oauth2-client
和 Keycloak。两者都使用 Spring Boot 3.2.4 和 Java 21。
当令牌过期时,如何使用一些 Spring Security 配置从 B 中的 RestClient 刷新令牌而无需手动执行?
application.properties中的一些东西,一些我不需要在调用A的方法中编写的Bean配置,如下所示:
try {
httpExchange.callA(); //fail
}catch(UnauthorizedException e) {
keycloakClient.refreshToken();
httpExchange.callA(); //works
}
搜索 spring security 文档,我找不到与 keycloak 方法匹配的内容。
A
Bearer
访问令牌是在调用 OAuth2 资源服务器而不是 OAuth2 客户端时使用的。
如果服务 A 配置了
spring-boot-stater-client
、provider
、registration
和 authorization_code
,那么服务 B 需要的是会话 cookie,而不是 Bearer
、令牌。这会突出显示错误配置(以及编写此配置的人需要获得更多 OAuth2 背景)。
现在,如果您在问题中混合了 OAuth2 客户端和资源服务器,则服务 B 应使用 OAuth2AuthorizedClientManager 来检索访问令牌。当授权客户端存储库中的令牌已过期或即将过期时,授权客户端管理器会获取新令牌(如果使用
authorization_code
配置了注册,则运行刷新令牌流程,或再次运行客户端凭证流程)。
您可能会发现有用我写的这个入门指南。我相信它已经做了你愿意做的事。如果你不想使用它,你仍然可以从源代码中复制。