本格的なOAuthクライアントを実装することは簡単ではなく、OAuth1.0a仕様を本当に理解する必要があるため、簡単に質問に答えるのは非常に困難です。それはロケット科学ではありませんが、それは本当にすべての断片を整理する必要があります。
私はあなたの質問に少しずつ答えようとします。
ベースストリングとは何ですか?
OAuthの署名ベース文字列は次のように作成されます。
- 大文字で、送信するリクエストのHTTPメソッドから始めます。例
POST
またはGET
。
- これにアンパサンド(
&
)文字を追加します
- リクエストで呼び出しているURLエンコード(パーセントエンコード)URLを追加します(ここにパラメーターを含めないでください)
- ここにさらに別のアンパサンド(
&
)文字を追加します
- 最後に、URLエンコードされたパラメータ文字列を追加します
最後のステップで必要なパラメータ文字列を作成する方法を説明します。
リクエストに含まれるすべてのパラメータを収集します。それらは、クエリ文字列の一部としてのURLと、リクエストを実行しているときのリクエスト本文のいずれかにありますPOST
。たとえばPOST
、パラメータparameter1=value1
をURLに設定しているとしますhttp://example.com/?parameter2=value2
。これにより、2つのパラメーターを含めることができます。
ここで、プロトコルを満足させるために必要なすべてのOAuthパラメーターも合計する必要があります。これらは、次のようなパラメータリストにつながります。
oauth_consumer_key=fffffaaaafffaaaff
oauth_nonce=aaaaabbbbbcccccaaaaudi2313
oauth_signature_method=HMAC-SHA1
oauth_timestamp=1319633599
oauth_token=bbbbbbbbbfsdfdsdfsfserwerfsddffdsdf
oauth_version=1.0
parameter1=value1
parameter2=value2
これらの個々の文字列はすべて、パラメータ名で辞書式に並べ替えて(アルファベット順で十分です)、文字列に連結する必要があります。それがあなたのパラメータ文字列です。
私はスペース->%20の例で正しいですか?
はい。あなたはパーセントエンコーディングについて話している。それはHTTPエンコーディングとURLエンコーディングの名前でもある。http://en.wikipedia.org/wiki/Percent-encoding。
HMAC-SHA1にはメッセージとキーが含まれますが、コンシューマーはメッセージを秘密にしますか?では、コンシューマーキーがキーですか?
メッセージは、上記で作成した署名ベース文字列です。そして重要なのは、コンシューマーシークレットとアクセストークンシークレットの組み合わせです。したがって、キーは次のようになります:(CONSUMER_SECRET&TOKEN_SECRET
アンパサンドに注意してください)。あなたがする絶対的な最初の要求では、あなたはまだトークンシークレットを持っていません、そしてキーはただですCONSUMER_SECRET&
(再び、アンパサンドに注意してください)。
HMAC-SHA1アルゴリズムを使用して署名を作成する方法。
これをhttp://oauth.googlecode.com/svn/code/csharp/OAuthBase.csから取得しました。シークレットとベース文字列は、コードで使用できると想定されています。
基本的に、HMACSHA1インスタンスにキーとメッセージをフィードし、そのハッシュをレンダリングしてbase64文字列に変換します。
HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? "" : UrlEncode(tokenSecret)));
byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes(signatureBaseString);
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);
return Convert.ToBase64String(hashBytes);
署名を作成できた場合、これらの値をTwitterに渡すにはどうすればよいですか?
HTTPヘッダーとは何かを簡単に調べることができるはずです。
ただし、パラメータと署名の最終結果をURLに追加することを選択できます。一部のリクエストでは、Twitterがリクエスト本文でそれらを受け入れることもあると思います。ただし、Authorization
プロトコル固有のパラメーターと要求固有のパラメーターを明確に分離できるため、HTTPヘッダーを使用することをお勧めします。
これは、次のようになります(OAuth 1.0a仕様から直接取得)。
Authorization: OAuth realm="Example",
oauth_consumer_key="0685bd9184jfhq22",
oauth_token="ad180jjd733klru7",
oauth_signature_method="HMAC-SHA1",
oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",
oauth_timestamp="137131200",
oauth_nonce="4572616e48616d6d65724c61686176",
oauth_version="1.0"