OAuth関連

リンク

関連API

oauth/request_token コンシューマキーからリクエストトークンの取得
oauth/authorize     認証(リクエストトークンからPINの取得)
oauth/authenticate  認証簡易版
oauth/access_token  リクエストトークンとPINからアクセストークンの取得

アクセストークン取得

  1. アプリケーション(クライアントorブラウザ)を
    http://twitter.com/oauth_clients から登録して
    コンシューマキーコンシューマシークレット を取得(アプリを表す識別子)

  2. コンシューマキー 及びOAuthパラメータを渡して
    http://api.twitter.com/oauth/request_token から戻り値を取得。
    成功するとクエリー形式でリクエストトークン/シークレットが返ってくる。
    oauth_token=リクエストトークン&oauth_token_secret=リクエストトークンシークレット

  3. リクエストトークンを渡したアクセス許可待ち画面を出して PIN を取得する。
    「http://api.twitter.com/oauth/authorize?oauth_token=リクエストトークン」
    「http://api.twitter.com/oauth/authenticate?oauth_token=リクエストトークン」
    のどちらかをブラウザで表示して認証を行う。ログインしていない場合はログインしてからになる。
    成功するとランダムな数字の PIN (oauth_verifier )を取得する。
    • このAPIコールは1回きりで、次からリクエストトークンが無効になる。
      2回目以降はまた新たなリクエストトークンの取得が必要になるため値は必ず保存すること。
    • アプリのタイプがクライアントなら PIN が表示されそれをクライアントに設定し、
      ブラウザなら受け取った PIN を持ったままアプリ登録時に設定したコールバックURLを呼び出す。

  4. コンシューマキーリクエストトークン PIN 及びOAuthパラメータを渡して
    「http://api.twitter.com/oauth/access_token」から戻り値を取得。
    成功するとクエリー形式でアクセストークン/シークレットが返ってくる。
    oauth_token=アクセストークン&oauth_token_secret=アクセストークンシークレット
    • このトークンは今のところ取得してからずっと使える。

OAuthパラメータ

Twitter API をOAuth認証で呼び出す際は常にこのパラメータを指定する。

共通パラメータ

oauth_consumer_key=コンシューマーキー (必須)
実行するアプリケーションのコンシューマーキー。
また、oauth_signature の暗号化にコンシューマーシークレットを用いる。
oauth_nonce=ランダム文字列 (必須)
使用可能な文字はASCIIコード 0x21〜0x7F の範囲内で printable なもの。
8〜32文字の半角英数字が望ましい。
oauth_signature_method=HMAC-SHA1 (必須)
signature の署名方式。固定
oauth_timestamp=実行日時のUNIXタイムスタンプ (必須)
現在時刻との誤差が激しいと認証失敗する。協定世界時(UTC)で指定する。
oauth_version=1.0 (オプション)
OAuthのバージョン。固定

oauth/request_token コール時

oauth_signature=署名文字列 (必須)
メソッド/パス/クエリーをコンシューマシークレット/空文字列で暗号化したもの。

oauth/access_token コール時

oauth_token=リクエストトークン (必須)
oauth/request_token で取得したリクエストトークンを指定。
また、oauth_signature の暗号化にリクエストトークンシークレットを用いる。
oauth_verifier=PIN (必須)
oauth/authorize か oauth/authenticate で取得した PIN を指定。
oauth_signature=署名文字列 (必須)
メソッド/パス/クエリーをコンシューマシークレット/リクエストトークンシークレットで暗号化したもの。

アクセストークン取得後(通常APIコールでのOAuth認証)

oauth_token=アクセストークン (必須)
コール時に取得したアクセストークンを指定。
また、oauth_signature の暗号化にアクセストークンシークレットを用いる。
oauth_signature=署名文字列 (必須)
メソッド/パス/クエリーをコンシューマシークレット/アクセストークンシークレットで暗号化したもの。

署名文字列 signature 生成

  • URLエンコードは RFC3986 に従う。
    0123456789
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    abcdefghijklmnopqrstuvwxyz
    -._~
    上記の文字以外を16進数文字列にエンコードする。
    php5.3.0以降の rawurlencode はこれに従っているが、
    それより前のバージョンは ~ も変換してしまうため注意が必要。
  • エンコードされた16進数文字列は「%FF」のように英字大文字にすること
    「%ff」のような小文字でははじかれる。
  • クエリーの各パラメータはキー名の昇順にソートすること
    oauth_signature をセットした後にも再ソートしておいたほうがいいかもしれない。
  • HMAC SHA-1 方式の暗号化は php5 なら hash_hmac 関数が使えるので簡単。
    php4 だと簡単に暗号化できる関数がないため自力で行う必要がある。
    Laughing Meme(英語)External Site にサンプルがある。
  1. メソッド、パス、クエリーをそれぞれURLエンコードして、半角 & で結合する。<データ>

  2. consumer key と token secret をそれぞれURLエンコードして、半角 & で結合する。<秘密鍵>
    リクエストトークン要求時は token secret が不明なのでこれは空文字列にしておく。
    ただし、& で結合はしておく。

  3. HMAC SHA-1 で「データ」を「秘密鍵」で暗号化したハッシュ値(バイナリ)を取得し、
    暗号化されたハッシュ値を base64 方式でエンコードしたものを signature として用いる。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規新規下位 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-06-13 (月) 13:19:02 (2203d)