Spring boot 如何在Springboot/Spring中使用oauth登录

Spring boot 如何在Springboot/Spring中使用oauth登录,spring-boot,oauth,Spring Boot,Oauth,我们有一个authservice运行在不同的机器上,它提供oauth登录。 所以我需要编写一个客户端来获取访问令牌。为此,我编写了以下代码。但它不起作用 String polarisOauthURL = "https://test.com/auth/oauth/token"; ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails (); re

我们有一个authservice运行在不同的机器上,它提供oauth登录。 所以我需要编写一个客户端来获取访问令牌。为此,我编写了以下代码。但它不起作用

String polarisOauthURL = "https://test.com/auth/oauth/token";
        ClientCredentialsResourceDetails resourceDetails  = new ClientCredentialsResourceDetails ();
        resourceDetails.setAccessTokenUri(polarisOauthURL);
        resourceDetails.setClientId("test");
        resourceDetails.setClientSecret("test");
        resourceDetails.setGrantType("client_credentials");
        List<String> scope = new ArrayList<>();
        scope.add("read");
//        scope.add("write");
        resourceDetails.setScope(scope);
        DefaultOAuth2ClientContext clientContext = new DefaultOAuth2ClientContext();
        OAuth2RestTemplate oauthRestTemplate = new OAuth2RestTemplate(resourceDetails, clientContext);

        List messageConverters = new ArrayList<>();
        messageConverters.add(new MappingJackson2HttpMessageConverter());
        oauthRestTemplate.setMessageConverters(messageConverters);

        System.out.println("access token: " + oauthRestTemplate.getAccessToken());
但是,当我试图从控制台执行相同的操作时,它工作正常

curl --user test:test --data 'grant_type=client_credentials' https://test.com/auth/oauth/token
有人能帮我在春天如何实现这个想法吗


谢谢

我假设代码确实在POST请求的主体内发送客户机id和机密,而curl命令确实使用HTTP基本身份验证,按照HTTP基本身份验证的规则将这些凭据base64编码在授权标头内。要在代码中确保这一点,您可以尝试添加如下内容:

resourceDetails.setClientAuthenticationScheme(AuthenticationScheme.header);

我假设,代码确实在POST请求的主体内发送客户端id和机密,而curl命令确实使用HTTP基本身份验证,将这些凭据base64按照HTTP基本身份验证的规则包装在授权标头内。要在代码中确保这一点,您可以尝试添加如下内容:

resourceDetails.setClientAuthenticationScheme(AuthenticationScheme.header);
curl --user test:test --data 'grant_type=client_credentials' https://test.com/auth/oauth/token