如何使用 ClientCredentialsAccessTokenProvider 在 POST 而不是 header 中发送 ClientId 和 ClientSecret
How to send ClientId and ClientSecret in a POST instead in the header with ClientCredentialsAccessTokenProvider
我的批次必须使用 OAuth2 和 grant-type 客户端凭据
连接到 web-service
这是代码:
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 和客户端密码被放入 header 与经典基本授权 header :
Authorization: Basic bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0
如果我解码字符串 bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0
decode64(bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0) -> my-client-id:my-client-secret
这通常没问题。但是我们必须使用的 Web 服务不支持这个,我们必须将 client-id 和 client-secret 放在 post 值中,例如 grant-type.
有办法实现吗?一种配置如何发送 client-id 和 client-secret 的方法?
迈克尔
ClientCredentialsResourceDetails
class 中有一个方法 setClientAuthenticationScheme
。它的默认值为 AuthenticationScheme.header
,您可能需要将其设置为 AuthenticationScheme.form
.
我的批次必须使用 OAuth2 和 grant-type 客户端凭据
连接到 web-service这是代码:
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 和客户端密码被放入 header 与经典基本授权 header :
Authorization: Basic bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0
如果我解码字符串 bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0
decode64(bXktY2xpZW50LWlkIDpteS1jbGllbnQtc2VjcmV0) -> my-client-id:my-client-secret
这通常没问题。但是我们必须使用的 Web 服务不支持这个,我们必须将 client-id 和 client-secret 放在 post 值中,例如 grant-type.
有办法实现吗?一种配置如何发送 client-id 和 client-secret 的方法?
迈克尔
ClientCredentialsResourceDetails
class 中有一个方法 setClientAuthenticationScheme
。它的默认值为 AuthenticationScheme.header
,您可能需要将其设置为 AuthenticationScheme.form
.