如何使用ClientCredentialsAccessTokenProvider在POST中发送ClientId和ClientSecret

Mic*_*rcy 2 spring spring-security spring-boot spring-security-oauth2 spring-cloud

我的批处理必须使用OAuth2与grant-type Client Credential连接到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());
Run Code Online (Sandbox Code Playgroud)

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

    Authorization: Basic bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0
Run Code Online (Sandbox Code Playgroud)

如果我解码字符串bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0

    decode64(bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0) -> my-client-id:my-client-secret
Run Code Online (Sandbox Code Playgroud)

这通常很好.但是我们必须使用的Web服务不支持这一点,我们必须将client-id和client-secret放在post-value之类的grant-type中.

有没有办法实现这一目标?一种配置如何发送客户端ID和客户端密钥的方法?

迈克尔

fre*_*man 6

有一种方法setClientAuthenticationSchemeClientCredentialsResourceDetails类.它的默认值是AuthenticationScheme.header,您可能需要将其设置为AuthenticationScheme.form.