3

我们正在尝试连接另一家公司的自定义 API,该 API 使用两条腿 OAuth 来验证请求并向我们发送响应。

目前我们拥有的代码正在发送一个请求,但它没有在另一端进行身份验证,因此发送了一个 UNAUTHORIZED 响应。

到目前为止,我们调查的步骤:

  • 使用相同的凭据在 python 中使用 OAuth 实现连接到远程站点。
  • 要求另一家公司将我们的 OAuth 请求与另一家成功的 OAuth 请求进行比较,以查看我们的 OAuth 请求中是否缺少任何内容。

在上面的第二点之后,我们的请求和另一个工作请求之间的唯一区别是oauth_token参数存在于我们的请求中而不是其他请求中。此外,他说他们的大多数oauth_body_hash_value请求都有一个,但我们的请求中没有 - 尽管他们确实收到了没有它的工作请求。

有没有办法删除oauth_tokenScribe 中的参数?或者,oauth_body_hash_value总是需要?没有请求可以工作吗?

我已经包含了下面的代码,我对 OAuth 完全陌生,所以请随时告诉我是否还有其他问题。

请注意,TestAPI.class 扩展了 DefaultAPI10a 并且只为所有三个必需的方法返回“”。

public class TestImporter {

  private static final String REQ_URL   = "http://test.com/";

  private static final String KEY         = "KEY";
  private static final String SECRET      = "SECRET";

  // test variables
  private static final String VAR1        = "Test123";

  public static void main(String[] args) {

    OAuthService service = new ServiceBuilder()
                               .provider(TestAPI.class)
                               .apiKey(KEY)
                               .apiSecret(SECRET)
                               .build();
    Token token = new Token("", "");
    OAuthRequest request = new OAuthRequest(Verb.GET, REQ_URL + VAR1 + "/");
    service.signRequest(token, request);
    Response response = request.send();
    System.out.println(response.getBody());

  }

}
4

3 回答 3

5

关于您自己的答案似乎您想要做的是将签名放在查询字符串中,而不是使用Authorization标头。

这虽然有效,但不推荐。无论如何,如果您真的需要这样做,有一种方法OAuthService可以在查询字符串中创建“签名”:

ServiceBuilder()
  .provider(TestAPI.class)
  .apiKey(KEY)
  .apiSecret(SECRET)
  .signatureType(SignatureType.QueryString)
  .build();
于 2011-12-14T22:00:57.683 回答
3

假设它们的实现没有被破坏,那么您是否包含“额外的”OAuth 标头并不重要。话虽如此,oauth_token标头不是可选的(我假设您正在使用 OAuth 1.0 进行通信)。此标头应包含用户的访问令牌。在您的示例中,您将此标记显示为空白,这很奇怪!

现在假设由于某种原因向该第三方系统发送空白“用户名”是有效的,您将需要确保您的 OAuth 签名在双方(您的和其他公司)上都匹配。使用协议嗅探器捕获oauth_signature标头的值,然后要求您的第三方验证他们生成的签名是否相同。如果不是,那么您可能有签名哈希问题。

于 2011-12-13T19:36:31.700 回答
0

事实证明,当我们认为我们正在发送一个完整的 HTTP GET 请求时,我们并没有。

该库将所有信息添加到标头(我们从中获取信息的位置),但没有将任何 oauth 信息添加到请求 URL。我只能假设这与我们使用两条腿授权有关(因此是空令牌)。

通过将映射复制oAuthParameters到中queryStringParameters,它就可以正确形成 URL。

于 2011-12-14T14:47:02.220 回答