Java Spring和OAuth2处于非交互模式,具有客户端\ U凭据授予类型

Java Spring和OAuth2处于非交互模式,具有客户端\ U凭据授予类型,java,spring,spring-security-oauth2,oauth2,Java,Spring,Spring Security Oauth2,Oauth2,我有一个REST服务,它使用OAuth2身份验证,并提供一个端点来请求一个具有client_凭证授权类型的令牌。该应用程序基于Spring Boot 到目前为止,我发现我可以请求一个带有如下内容的令牌: @SpringBootApplication @EnableOAuth2Client public class App extends WebSecurityConfigurerAdapter { @Autowired OAuth2ClientContext oauth2Cli

我有一个REST服务,它使用OAuth2身份验证,并提供一个端点来请求一个具有client_凭证授权类型的令牌。该应用程序基于Spring Boot

到目前为止,我发现我可以请求一个带有如下内容的令牌:

@SpringBootApplication
@EnableOAuth2Client
public class App extends WebSecurityConfigurerAdapter {

    @Autowired
    OAuth2ClientContext oauth2ClientContext;

    //...

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Does nothing - to allow unrestricted access
    }    

    @Bean
    protected OAuth2RestTemplate myTemplate() {
        ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
        details.setAccessTokenUri("http://localhost:8080/oauth/token");
        details.setClientId("theClient");
        details.setClientSecret("thePassword");
        return new OAuth2RestTemplate(details, oauth2ClientContext);
    }

}

@RestController
public class TestController {

    @Autowired
    OAuth2RestTemplate myTemplate;

    @RequestMapping("/token")
    private String getToken() {
        return myTemplate.getAccessToken().getValue();
    }

}
它几乎可以工作,但每当我调用
/token
端点时,都会出现一个例外:

org.springframework.security.authentication.InsufficientAuthenticationException: Authentication is required to obtain an access token (anonymous not allowed)
    at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.obtainAccessToken(AccessTokenProviderChain.java:88) ~[spring-security-oauth2-2.0.9.RELEASE.jar:na]
    at org.springframework.security.oauth2.client.OAuth2RestTemplate.acquireAccessToken(OAuth2RestTemplate.java:221) ~[spring-security-oauth2-2.0.9.RELEASE.jar:na]
    at org.springframework.security.oauth2.client.OAuth2RestTemplate.getAccessToken(OAuth2RestTemplate.java:173) ~[spring-security-oauth2-2.0.9.RELEASE.jar:na]
    ...

引发了异常,但我不确定如何使Spring使用上下文身份验证,而不是
AnonymousAuthenticationToken
。事实上,我不想从客户端进行任何身份验证,因为匿名是完全可以的。如何实现这一点?

为什么您需要使用客户端凭据流,因为客户端凭据总是使用某些凭据这是一个好问题,但这就是服务的实现方式:您只能使用同一服务提供的令牌连接到它,令牌是通过OAuth2获得的。我想你在寻找匿名身份验证,看看Spring Security中关于匿名身份验证支持的其他问题看看这个问题,如果这可以帮助你,那么为什么你需要使用客户端凭据流,因为客户端凭据总是使用某些凭据这是个好问题,但这就是服务的实现方式:您只能使用同一服务提供的令牌连接到它,令牌是通过OAuth2获得的。我想您正在寻找匿名身份验证,看看Spring Security中关于匿名身份验证支持的其他问题看看这个问题,如果这能帮到你,