Apache Oltu客户端库未正确发送客户端凭据授予类型?

时间:2013-11-26 12:13:15

标签: apache oauth oauth-2.0 oltu

我尝试在Apache Oltu中使用OAuthClientRequest实现OAuth客户端。并且它似乎是根据规范在消息正文中而不是在Basic Auth头中发送客户端凭据。我不确定,我可能在代码中遗漏了一些东西。

代码

OAuthClientRequest.tokenLocation("http://localhost:8081/token")
                .setGrantType(GrantType.CLIENT_CREDENTIALS)
                .setClientId(clientKey)
                .setClientSecret(clientSecret)
                .buildBodyMessage();

请求

  

POST /令牌HTTP / 1.1   内容类型:application / x-www-form-urlencoded   缓存控制:无缓存   Pragma:没有缓存   用户代理:Java / 1.6.0_29   主持人:127.0.0.1:8081   接受:text / html,image / gif,image / jpeg,*; q = .2, / ; Q = 0.2   连接:保持活力   内容长度:127

     

client_secret = f921854d-f70b-4180-9fdd-3a55032103cc&安培; grant_type = client_credentials&安培; CLIENT_ID = 3f3b4092-7576-4b26-8135-980db7864c2

3 个答案:

答案 0 :(得分:2)

您可能希望使用buildBodyMessage()

更改buildQueryMessage()

答案 1 :(得分:1)

OAuth2 Bearer Token specification定义了三种发送承载访问令牌的方法:

  • 授权请求标题字段
  • 表格编码的身体参数
  • URI查询参数

方法buildBodyMessage()将使用Form-Encoded Body Parameter创建请求。您需要使用buildHeaderMessage()代替,这也是规范推荐的方法。

答案 2 :(得分:0)

最近,我试图找到一个OAuth2 java库来获取“client_credential”类型的accesstoken。以下是我对Apache Oltu的看法,似乎它正在发挥作用。

@Test
public void getAccessTokenViaApacheOltuOAuthClient() {
try{

    OAuthClient client = new OAuthClient(new URLConnectionClient());

    OAuthClientRequest request =
            OAuthClientRequest.tokenLocation(TOKEN_REQUEST_URL)
                    .setGrantType(GrantType.CLIENT_CREDENTIALS)
                    .setClientId(CLIENT_ID)
                    .setClientSecret(CLIENT_SECRET)
                    .setScope(StringUtils.join(TEST_SCOPES, " ")) //if you have scope
                    .buildBodyMessage();

    String token =
            client.accessToken(request, "POST", OAuthJSONAccessTokenResponse.class)
                    .getAccessToken();

    System.out.println(token);
    assertTrue( token != null);

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

}