6

Get twitter public timeline、json + C#、サードパーティライブラリなしからの続き

私はまだC#とoAuthに慣れていないので、何も理解できない場合はご容赦ください

oAuthClassという名前のC#クラスを作成しました。これらは、現在持っている変数です。

    static class oAuthClass
{
    public static void run()
    {
        int oauth_timestamp = GetTimestamp(DateTime.Now);
        string oauth_nonce = PseudoRandomStringUsingGUID();
        string oauth_consumer_key = "consumer key here";
        string oauth_signature_method = "HMAC-SHA1";
        string oauth_version = "1.0";
    }
}

OAuth署名について読んだことがありますが、今のところHMAC-SHA1を使用することを選択しました。署名の生成方法がわかりません。また、HTTPエンコーディングやベース文字列などを読んで見た後、非常に混乱しています。そして何を意味するのか(私はそれらが何を意味するのかまったくわかりません)、しかし私の推測では、スペース-> "%20"のように "Http-encoded"のURLを作成することですか?

要約:-ベースストリングとは何ですか?

-私はスペースに正しいですか->%20の例?

-HMAC-SHA1にはメッセージとキーが含まれますが、コンシューマーシークレットはメッセージですか?では、コンシューマーキーがキーですか?

-HMAC-SHA1アルゴリズムを使用して署名を作成する方法

-署名を作成できた場合、これらの値をTwitterに渡すにはどうすればよいですか?

使用できます

http://example.com?consumer_key=asdf&oauth_signature=signaturevalue&etc., 

しかし、私は読んだことがあり、明らかに人々はHTTPヘッダーか何かを使用しています(繰り返しますが、これが何であるかは本当にわかりません)

ありがとうございました!繰り返しますが、サードパーティのライブラリは許可されていません:(

4

2 に答える 2

14

本格的な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"
于 2012-05-21T19:35:46.577 に答える
0

本当に混乱していて、単純なライブラリを使用したいだけの場合は、Twitterizerを調べることをお勧めします

ドキュメントには例があり、セットアップは非常に簡単です。

[編集]おっと、申し訳ありませんが、サードパーティのライブラリを探していないことをお読みください。ごめん

于 2012-05-21T15:31:51.243 に答える