如何使用ClientCredentialsAccessTokenProvider

时间:2015-08-17 10:16:27

标签: spring spring-security spring-boot spring-security-oauth2 spring-cloud

我的批处理必须使用OAuth2与授予类型的客户端凭据

连接到Web服务

以下是代码:

    ClientCredentialsResourceDetails resource = new ClientCredentialsResourceDetails();

    resource.setAccessTokenUri(accessTokenUri);
    resource.setClientId(clientId);
    resource.setClientSecret(clientSecret);

    ClientCredentialsAccessTokenProvider provider = new ClientCredentialsAccessTokenProvider();     
    OAuth2AccessToken accessToken = provider.obtainAccessToken(resource, new DefaultAccessTokenRequest());

当执行此代码时,它会发出一个请求,其中grant_type在post值中,但clientId和客户端机密将放在带有经典基本auth标头的标头中:

    Authorization: Basic bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0

如果我解码字符串bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0

    decode64(bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0) -> my-client-id:my-client-secret

通常没问题。但是我们必须使用的Web服务不支持这一点,我们必须将client-id和client-secret放在post-value中,如grant-type。

有没有办法实现这一目标?一种配置如何发送client-id和client-secret的方法?

迈克尔

1 个答案:

答案 0 :(得分:6)

setClientAuthenticationScheme类中有一个方法ClientCredentialsResourceDetails。默认值为AuthenticationScheme.header,您可能需要将其设置为AuthenticationScheme.form