Spring OAuth2自定义请求 - 将参数放在正文上,就像原始数据一样

时间:2018-02-09 08:55:22

标签: spring-security http-headers spring-security-oauth2

我正在使用Spring Security OAuth2实现客户端以通过API使用资源,我必须自定义这样的请求:

POST https://example.com/v2/oauth2/token HTTP / 1.1
Authorization: Basic xxxXXXXxxXXXXXXxXXxxXX
Content-Type: application / x-www-form-urlencoded
Accept: application / json; charset = UTF-8

grant_type = authorization_code & code = 12345678901234567890

其中:grant_type = authorization_code&代码= 12345678901234567890 它作为原始数据包含在体内。

如何将grant_type和代码参数放在正文上?

目前,我的代码以这种方式正式化:

AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails ();
resource.setAccessTokenUri ( "https://example.com/v2/oauth2/token");
resource.setClientId ( "xxxxx");
resource.setClientSecret ( "xxxxx");
resource.setGrantType ( "authorization_code");
resource.setUseCurrentUri (false);
AccessTokenRequest atr = new DefaultAccessTokenRequest ();
atr.setPreservedState (new Object ());
atr.setAuthorizationCode(authCode);

AuthorizationCodeAccessTokenProvider provider = new AuthorizationCodeAccessTokenProvider ();

try {
OAuth2AccessToken accessToken = provider.obtainAccessToken (resource, atr);
}
catch (Exception e) {
System.out.println ("DEBUG" + e);
}

2 个答案:

答案 0 :(得分:2)

在授权服务器完成授权过程之前,您可以使用过滤器拦截对令牌端点的请求。

这是我使用json作为正文而不是URL编码格式的OAuth2实现。

https://github.com/aldwindelgado/spring-boot-oauth2-server/blob/master/src/main/java/com/github/oauth2/server/JsonToUrlEncodedAuthenticationFilter.java

答案 1 :(得分:0)

添加atr.setAuthorizationCode("12345678901234567890");以将身份验证代码设置为访问令牌请求。