有一个没有 oauth 客户端配置的 Spring Boot 应用程序:
spring.security.oauth2.client.registration.number1.client-id = ....
spring.security.oauth2.client.registration.number1.scope = openid,...
....
spring.security.oauth2.client.registration.number2
...
spring.security.oauth2.client.registration.numberN
...
我相信可以配置下一个场景:
现在的问题是 SecurityContextHolder
会在任何客户端注册流程完成后立即填充新的主体,覆盖先前的值。
我在需要的地方使用了类似的代码片段:
Authentication principal = SecurityContextHolder.getContext().getAuthentication(); // can be spoiled
if (principal == null) {
principal = ANONYMOUS_AUTHENTICATION;
}
OAuth2AuthorizeRequest authRequest = OAuth2AuthorizeRequest.withClientRegistrationId(primaryRegId)
.principal(principal)
.attribute(HttpServletRequest.class.getName(), servletRequest)
.attribute(HttpServletResponse.class.getName(), servletResponse)
.build();
oAuth2AuthClientManager.authorize(authRequest);
我该如何解决这个问题? 是否有可能命令 Spring 不重置身份验证而只获取 access_token?
我找到了一些关于多租户的信息,但它是关于资源服务器端的 - 根据其声明验证 jwt 令牌 - 而这不是我现阶段的情况。