首页 > 解决方案 > OAuth2 | ClientCredentialsResourceDetails | 已弃用

问题描述

我是 Spring Security 的新手,我遇到了使用 client_credentials 作为 Grant 类型来实现 OAuth2。我正在使用下面的代码,但我收到建议,ClientCredentialsResourceDetails、OAuth2RestTemplate 和 OAuth2AccessToken已被弃用。

有人可以帮忙解决这个问题吗?

 private String getAuthTocken(){
     final ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
     resourceDetails.setClientId("ceapiClientId");
     resourceDetails.setClientSecret("ceapiClientSecret");
     resourceDetails.setGrantType("client_credentials");
     resourceDetails.setAccessTokenUri("https://auth.abcdcommerce.com/oauth-server/oauth/token");

     final OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(resourceDetails);
     final OAuth2AccessToken accessToken = oAuth2RestTemplate.getAccessToken();

     final String accessTokenAsString = accessToken.getValue();
     return accessTokenAsString;
 } 

标签: spring-bootspring-securityspring-security-oauth2spring-oauth2

解决方案


另一种方法是使用新的非阻塞WebClientRestTemplate带有拦截器的不推荐使用的OAuthRestTemplate. 工件中的所有spring-security-oauth内容都有一个生命终结路线图。

https://spring.io/blog/2019/11/14/spring-security-oauth-2-0-roadmap-update

https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Features-Matrix

迁移指南可以在这里找到,

https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide

从迁移指南,

Spring Security 选择支持组合,而是公开一个OAuth2AuthorizedClientService,这对于创建RestTemplate拦截器或WebClient交换过滤器功能很有用。Spring Security 为ExchangeFilterFunction都利用此服务的基于 Servlet 和 WebFlux 的应用程序提供了 s。

这里有一个迁移示例,

https://github.com/jgrandja/spring-security-oauth-5-2-migrate


推荐阅读