3

我尝试在 Apache Oltu 中使用 OAuthClientRequest 实现 OAuth 客户端。根据规范,它似乎是在消息正文中而不是在基本身份验证标头中发送客户端凭据。我不确定,我可能错过了代码中的某些内容。

代码

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

要求

POST /token HTTP/1.1 Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache Pragma: no-cache User-Agent: Java/1.6.0_29 Host: 127.0.0.1:8081 Accept: text /html、图像/gif、图像/jpeg、*;q=.2, / ; q=.2 连接:保持活动内容长度:127

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

4

3 回答 3

2

你可能想buildBodyMessage() 改变buildQueryMessage()

于 2013-12-02T11:34:24.050 回答
1

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

  • 授权请求头域
  • 形式编码的正文参数
  • URI 查询参数

该方法buildBodyMessage()将创建一个带有表单编码正文参数的请求。您需要使用buildHeaderMessage(),这也是规范推荐的方法。

于 2013-12-30T14:36:46.403 回答
0

最近,我试图找到一个 OAuth2 java 库来获取“client_credential”类型的访问令牌。下面是我为 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();
}

}

于 2017-03-07T20:26:48.540 回答