从Scribe中的请求标头中删除oauth_token

时间:2011-12-13 17:33:02

标签: java oauth scribe two-legged

我们正在尝试与另一家公司的自定义API建立联系,该API使用两条腿OAuth来验证请求并向我们发送回复。

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

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

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

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

有没有办法删除Scribe中的oauth_token参数?或者,总是需要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());

  }

}

3 个答案:

答案 0 :(得分:5)

关于your own answer,您想要做的就是将签名放在查询字符串中,而不是使用授权标题。

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

ServiceBuilder()
  .provider(TestAPI.class)
  .apiKey(KEY)
  .apiSecret(SECRET)
  .signatureType(SignatureType.QueryString)
  .build();

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

事实证明,当我们认为我们发送完全形成的HTTP GET请求时,我们不是。

图书馆将所有信息添加到标题中(我们从中获取信息),但不向请求Url添加任何oauth信息。我只能假设它与我们使用双腿授权(因此是空令牌)。

通过将oAuthParameters的地图复制到queryStringParameters,它可以正确地形成网址。