Jus*_*hao 9 spring spring-security spring-security-oauth2
我有一个自动连接许多服务的控制器。这些服务是 HTTP Restful 调用,从各种数据源检索数据,但这些服务受 OAuth2.0 保护。
我正在尝试使用 Spring Security 来实现客户端凭据流,该流将允许这些服务安全地从这些受保护的数据源检索数据,但在解析服务层的 OAuth2AuthorizedClient 数据对象时遇到一些困难。
我一直在尝试通过 @RegisteredOAuth2AuthorizedClient注释解析授权客户端:
public void setAuthorizedClient(
@RegisteredOAuth2AuthorizedClient("azure") OAuth2AuthorizedClient authorizedClient) {
ClientRegistration clientRegistration =
this.clientRegistrationRepository.findByRegistrationId("azure");
System.out.println(clientRegistration);
OAuth2AccessToken accessToken = authorizedClient.getAccessToken();
jwtToken = accessToken.getTokenValue();
}
Run Code Online (Sandbox Code Playgroud)
是否可以将OAuth2AuthorizedClient解析为 Spring bean,然后将其注入到另一个 bean 中?
或者有更好的方法来构建这样的系统吗?
谢谢!
小智 1
这是一个老问题,但我刚刚为自己解决了这个问题,所以这里是:
您可以创建一个为您返回 OAuth2AuthorizedClient 的 @Component,并将其注入到您需要的地方。这是一个示例方法:
例子:
@Component
public class OAuth2AuthorizedClientProvider {
@Autowired
private OAuth2AuthorizedClientService clientService;
public OAuth2AuthorizedClient getClient() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
OAuth2AuthenticationToken oauthToken = (OAuth2AuthenticationToken) authentication;
return clientService.loadAuthorizedClient(oauthToken.getAuthorizedClientRegistrationId(), oauthToken.getName());
}
Run Code Online (Sandbox Code Playgroud)
然后在控制器中使用 OAuth2AuthorizedClientProvider,如下所示:
@RestController
public class Endpoint {
@Autowired
private final OAuth2AuthorizedClientProvider oauth2AuthorizedClientProvider;
@GetMapping("/mymethod")
public String mymethod() {
return oauth2AuthorizedClientProvider.getClient().getAccessToken();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4788 次 |
| 最近记录: |