Skip to content

Instantly share code, notes, and snippets.

@0mg
Created March 30, 2013 14:32
Show Gist options
  • Save 0mg/5276918 to your computer and use it in GitHub Desktop.
Save 0mg/5276918 to your computer and use it in GitHub Desktop.
OAuth 対応 Twitter クライアント作成メモ

OAuth 対応 Twitter クライアント作成メモ

  • 前提: OAuth version 1.0a, Twitter API 1.1

OAuth 認証を通じてツイートするのに必要なたった 1 つのこと

リクエストヘッダに Authorization フィールドをセットする

OAuth 認証を通じてツイートするためには、API に対して POST する際、リクエストヘッダに Authorization フィールドを含める必要がある。

逆にいえば、リクエストヘッダの Authorization フィールドに正しい値を含めさえすれば、POST が通る。

クライアントは 4 つの key, token を持っている必要がある

Authorization フィールドの値のうち、いくつかの値を生成するのに 4 つの key, token が必要となる。これらは全て ASCII 文字列である。

  • Consumer key
  • Consumer key secret
  • Access token
  • Access token secret

以下に、これら 4 つの key, token の概要を記す。

Consumer key, Consumer key secret の概要

  • Consumer key = クライアント識別情報
  • Consumer key secret = Authorization フィールドの oauth_signature 値を生成する際の計算のみに用いる

上記 2 つの key は、Twitter Developers のサイト上で取得できる。

My applications | Twitter Developers (https://dev.twitter.com/apps) にアクセス、ログイン後、クライアント(アプリケーションが実在するかどうかは問わない)の登録を行うことで、サイトに表示される。

Access token, Access token secret の概要

  • Access token = ユーザー識別情報
  • Access token secret = Authorization フィールドの oauth_signature 値を生成する際の計算のみに用いる

上記 2 つの token は、Twitter API の OAuth 認証用 API を通じて取得する必要がある。ステップは 3 つある。

STEP 1

まず、Request token, Request token secret を取得する

  • API: https://api.twitter.com/oauth/request_token へ POST する
    • この API においても、リクエストヘッダに Authorization フィールドを 含める必要がある
    • 値の生成には Consumer key, Consumer key secret が必要だ

この API の戻り値に Request token, Request token secret が含まれている

STEP 2

次に、oauth_verifier を取得する

  1. この URL をブラウザで開くと、Twitter クライアント認証画面が表示される
  2. ログインして、認証ボタンを押す
  3. すると、コールバック URL 先に自動リダイレクトされる
コールバック URL は、以下のようにして指定できる
* A. dev.twitter.com/apps で予め設定しておく
* B. STEP 1 において Authorization フィールドに oauth_callback を付加する

A, B 両方ともに設定した場合は、後者 B の URL が優先される

コールバック URL のクエリに oauth_verifier が付加されている

STEP 3

Access token, Access token secret を取得する

  • API: https://api.twitter.com/oauth/access_token へ POST する
    • この API においても、リクエストヘッダに Authorization フィールドを 含める必要がある
    • 値の生成には Consumer key, Consumer key secret, Request token, Request token secret, oauth_verifier が必要だ

この API の戻り値に Access token, Access token secret が含まれている

Authorization フィールドの値

oauth_consumer_key: "uMXCp2EcMQkvs5YnzFBnr"
Consumer key の値をセットする
oauth_nonce: "hoge"
てきとうな文字数で、てきとうな文字列をセットする
oauth_timestamp: "1364640770"
タイムスタンプをセットする
JavaScript の Math.floor(Date.now()/1000) と等しい
現時点の Twitter API では 30 分程度の誤差が許容される
oauth_version: "1.0"
使用する OAuth のバージョンをセットする
oauth_signature_method: "HMAC-SHA1"
oauth_signature 値の生成に使用したハッシュ関数の名称をセットする
oauth_signature: "+9sdGxiqbAgyS31ktx+3Y3BpDh0="
HMAC-SHA1 関数 + Base-64 により生成した文字列をセットする

HMAC-SHA1

Authorization フィールドの 1 つに oauth_signature というものがある。 ここにセットする値は、HMAC-SHA1 というハッシュ関数を用いて生成する。

HMAC-SHA1 とは HMAC と SHA1 という 2 種類の関数が合わさったものだ。

  1. まず、OAuth の仕様通りの手順にしたがって SHA1 で値 A を生成する。
  2. 次に、値 A および SHA1 関数自体を、HMAC 関数に入れて、値 B を生成する。
  3. 最後に、値 B を Base-64 でエンコードして値 C を生成する。
  4. 値 C を oauth_signature の値としてセットする。
  • 擬似コード
  function HMAC-SHA1(key, text) {
    IPAD = [0x36,..]
    OPAD = [0x5C,..]
    return SHA1((key XOR OPAD) concat SHA1((key XOR IPAD) concat text))
  }

HMAC-SHA1 参考リンク集

HMAC-SHA1 を実装するのに、以下のサイトを参考にした

Twitter OAuth 参考リンク集

OAuth 認証処理の一部を実装するのに、以下のサイトを参考にした

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment