如何在Oauth2和keycloak中刷新令牌RestClient?

问题描述 投票:0回答:1

我有两项服务:

  • 服务 A,使用
    spring-security-oauth2-client
    和 Keycloak。
  • 服务 B,通过 RestClient 和 HttpExchange 接口使用 A 中的一些端点。

两者都使用 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 方法匹配的内容。

spring spring-boot spring-security keycloak spring-security-oauth2
1个回答
0
投票

A

Bearer
访问令牌是在调用 OAuth2 资源服务器而不是 OAuth2 客户端时使用的。

如果服务 A 配置了

spring-boot-stater-client
provider
registration
authorization_code
,那么服务 B 需要的是会话 cookie,而不是
Bearer
、令牌。这会突出显示错误配置(以及编写此配置的人需要获得更多 OAuth2 背景)。

现在,如果您在问题中混合了 OAuth2 客户端和资源服务器,则服务 B 应使用 OAuth2AuthorizedClientManager 来检索访问令牌。当授权客户端存储库中的令牌已过期或即将过期时,授权客户端管理器会获取新令牌(如果使用

authorization_code
配置了注册,则运行刷新令牌流程,或再次运行客户端凭证流程)。

您可能会发现有用我写的这个入门指南。我相信它已经做了你愿意做的事。如果你不想使用它,你仍然可以从源代码中复制。

© www.soinside.com 2019 - 2024. All rights reserved.