Spring安全性中的Oauth2客户端

时间:2016-06-28 19:45:26

标签: java spring spring-security oauth

我找到了使用Spring实现的OAuth2客户端的示例。

我使用Spring实现了OAuth2授权和资源服务器。我想从该授权服务器获取访问令牌。我需要一个示例,如何仅使用客户端凭据从我的OAuth2服务器获取访问令牌。没有用户参与,只有我的客户端应用使用客户端凭据获取访问令牌,然后使用它来访问客户端资源。

我发现只有使用Java库的示例,但我认为在Spring的OAuth2框架中支持它。

如果可能,示例应包含OAuth2客户端,OAuth2授权服务器和OAuth2资源服务器,所有这些都使用自签名证书通过TLS进行通信,使用Spring实现,不使用xml配置。

这是序列图:

enter image description here

1 个答案:

答案 0 :(得分:10)

通过Spring Security OAuth2库获取访问令牌是相当直接的,如下所示的示例代码。在这种情况下,您唯一需要的依赖是

<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

示例代码:

@Test
public void getAccessTokenViaSpringSecurityOAuthClient() {
    try{

        ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
        resourceDetails.setClientSecret(TestOAuthConstants.CLIENT_SECRET);
        resourceDetails.setClientId(TestOAuthConstants.CLIENT_ID);
        resourceDetails.setAccessTokenUri(TestOAuthConstants.TOKEN_REQUEST_URL);
        resourceDetails.setScope(TestOAuthConstants.SCOPES);

        OAuth2RestTemplate oAuthRestTemplate = new OAuth2RestTemplate(resourceDetails);

        org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders();
        headers.setContentType( MediaType.APPLICATION_JSON );

        OAuth2AccessToken token = oAuthRestTemplate.getAccessToken();
        System.out.println(oAuthRestTemplate.getResource());
        System.out.println(oAuthRestTemplate.getOAuth2ClientContext());
        System.out.println(token);

        assertTrue(token != null);

    } catch (Exception e) {
        e.printStackTrace();
    }
}