3

Two-legged OAuth を使用してリクエストを認証し、レスポンスを送信する別の会社のカスタム API に接続しようとしています。

現時点では、コードはリクエストを送信していますが、相手側で認証されていないため、UNAUTHORIZED レスポンスを送信しています。

これまでに調査した手順は次のとおりです。

  • 同じ資格情報を使用して Python で OAuth 実装を使用してリモート サイトに接続しました。
  • 他の会社に、私たちの OAuth リクエストを成功した別の会社と比較して、私たちの OAuth リクエストに欠けているものがあるかどうかを確認するよう依頼しました。

上記の 2 番目のポイントの後、私たちのリクエストと別の有効なリクエストの唯一の違いは、oauth_tokenパラメーターが私たちのリクエストに存在し、他のリクエストには存在しないことです。さらに、彼はoauth_body_hash_valueほとんどのリクエストには がありますが、私たちのリクエストには存在しないと言いました。

oauth_tokenScribe でパラメータを削除する方法はありますか? または、 はoauth_body_hash_value常に必要ですか? リクエストはなくても機能しますか?

以下のコードを含めました。OAuth はまったく初めてなので、他に何か問題がある場合はお気軽にお知らせください。

TestAPI.class は DefaultAPI10a を拡張し、必要な 3 つのメソッドすべてに対して "" を返すだけであることに注意してください。

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

完全に形成されたHTTPGETリクエストを送信していると思ったとき、そうではなかったことがわかりました。

ライブラリはすべての情報をヘッダー(情報の取得元)に追加していましたが、リクエストURLにoauth情報を追加していませんでした。私はそれが2本足の認証を使用することと関係があると推測することができます(したがって空のトークン)。

のマップをにコピーすることoAuthParametersによりqueryStringParameters、URLが正しく形成されるようになりました。

于 2011-12-14T14:47:02.220 に答える