2

Twitter でアプリを作成しようとしていますが、最初のステップで行き詰まっています。

https://api.twitter.com/oauth/request_tokenに POST しようとしていますが、毎回 401 が返されます。

私は Apache Commns HTTPClient の POST メソッドのバリエーションを使用しています。これは私のツールに非常に固有のものです。そのため、概要図を投稿します。

My Header:   'oAuth '+
             'oauth_callback="oob",'+
             'oauth_consumer_key="zhaD2Y6RrQaaZQSz21RShA",'+// fake
             'oauth_nonce="'+ <random string of 32Characters>  +'",'+
             'oauth_signature="'+ a.signature +'",'+
             'oauth_signature_method="HMAC-SHA1",'+
             'oauth_timestamp="'+ <Time in seconds since UNIX epoc> +'"';

このメソッドで署名を生成しています:

ステップ 1: キーと値のペアをパーセンテージ エンコーディングし、Twitter の署名ページに記載されているようにそれらを追加します。

ステップ 2: パーセンテージ エンコーディングの後、POST と URL を追加します。これは私が残したものです:

POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Doob%26oauth_consumer_key%20%3D%20zhaD2Y6RrQaaZQSz21RShA%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958,

ここまでは順調ですね..

私の問題はここから始まります.次のステップはキーに署名することです.2つのことが必要です.

  1. アプリケーションのコンシューマ シークレット
  2. アクセス トークン (このhttps://dev.twitter.com/docs/auth/creating-signatureページにあるように)

これら 2 つを & で追加してから、HMAC-SHA1 を実行します。しかし、アクセストークンを取得するにはどうすればよいですか?

私はまだ自分の POST を Twitter に送信していませんよね? ここでのアクセス トークンは Bearer トークンを意味しますか?

このページには、アクセス トークンを取得する方法についても言及されていません (実際にはそうですが、このアクセス トークンを正しく取得するために POST を実行しているのですか!?)

ご助力いただきありがとうございます!

4

1 に答える 1

2

最初に理解しておくべきことは、Twitter で使用される OAuth 1.0a にはいくつかの手順があるということです。

ステップ 1: Twitter から無許可のリクエスト トークンをリクエストする

ステップ 2: Twitter はリクエスト トークンとリクエスト トークン シークレットで応答します。

ステップ 3: リクエスト トークンを使用してユーザーを Twitter に送信し、ユーザーからアプリの承認を得る

ステップ 4: Twitter から確認コードが返されます

ステップ 5: リクエスト トークンと検証コードを Twitter に送信してアクセス トークンを取得する

ステップ 6: Twitter がアクセス トークンとアクセス トークン シークレットを返します。

ステップ 7: アクセス トークンとアクセス トークン シークレットを使用して、Twitter API にリクエストを送信する

プロセスの各段階で、コンシューマ キーと適切なトークン シークレットを使用してリクエストに署名する必要があります。ステップ 1 では、コンシューマ シークレットしかないため、署名キーは、パーセントでエンコードされたコンシューマ シークレットにアンパサンド文字を追加することによって作成されます。ここで、上記の署名ベース文字列に oauth_version パラメータがなく、ベース文字列がコンマで終わってはならないことにも注意してください。

リクエスト トークンとリクエスト トークン シークレットを取得したら (ステップ 2)、ユーザーを Twitter 承認 URL に送信して、アプリに承認を付与できます。これは、リクエスト トークンをクエリ文字列として承認 URL に追加し、ユーザーにその URL にアクセスしてもらうことによって実現されます (ステップ 3)。すなわち

https://api.twitter.com/oauth/authorize?request_token=NPxxxxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0 このリクエストは署名する必要がないことに注意してください。

ユーザーが Twitter にログインしてアプリを承認すると、アプリケーションに返す検証コード (oauth_verifier) を受け取ります (ステップ 4)。

次に、リクエスト トークンをアクセス トークンと交換するように Twitter にリクエストします。これは、oauth_verifier コードを含む署名付きリクエストを Twitter アクセス トークン URL ( https://api.twitter.com/oauth/access_token ) に POST することによって実現されます。署名キーは、アンパサンド文字を使用して、パーセント エンコードされたリクエスト トークン シークレットに追加されたパーセント エンコードされたコンシューマ シークレットを使用して作成されます (ステップ 5)。

すべて問題なければ、Twitter は access_token と access_token_secret で応答します (ステップ 6)。これらのトークンを使用して、ユーザーに代わって今後のすべてのリクエストを行うことができます (ステップ 7)。これらの要求の署名キーは、アンパサンド文字を使用して、パーセント エンコードされたアクセス トークン シークレットに追加されたパーセント エンコードされたコンシューマー シークレットを使用して作成されます。

最後に、ベアラー トークンは OAuth 2 の一部であり、OAuth 1.0a とはまったく異なる認証フローを持っています。

OAuth 署名を確認する必要がある場合は、このようなユーティリティを使用できます。

于 2013-05-20T09:08:50.533 に答える