2011-01-17 知った被って書いてみる
OAuthの仕組み
OAuthは慣れるまでが大変で、慣れてしまえば簡単に実装することができます。
基本的にOAuthは
- リクエストトークンの取得
- ユーザに認証を求める
- アクセストークンの取得
と行います。
Twitterではデスクトップアプリケーションを作成するときにのみ、
xAuthという機能を使用してこの作業を簡易化できます。
リクエストトークン取得
- oauth_callback
- 特にないときは'oob'を指定します。URLを指定する場合はパーセントエンコードします
- oauth_consumer_key
- 発行されたキーをパーセントエンコードします
- oauth_nonce
- ランダムな英数字を作成します
- oauth_signature_method
- 'HMAC-SHA1'を指定します
- oauth_timestamp
- 1970/01/01 0:00からの経過秒数を指定します
- oauth_version
- '1.0'を指定します
これらと追加のパラメータをソートし、キーと値を"="でつないだものを"&"で列挙します。
するとこんな文字列が出来上がります。これを「文字列A」とします。
oauth_callback=oob& oauth_consumer_key=hogehoge& oauth_nonce=sixHnbjS0bWOz9Zu15lrCTvnXEHDs0A& oauth_signature_method=HMAC-SHA1& oauth_timestamp=1295341566& oauth_version=1.0
(読みやすいよう改行を入れていますが、実際は一行です。今後も同様です)
次に署名(Signature)を作成します。正直これが一番難しいです。
以下の条件でHMAC-SHA1を取得します。
これで得られた文字列をBase64エンコードにかけ、さらにパーセントエンコードします。
その文字列がSignatureです。
文字列Aの後ろに"&oauth_signature=Signature"として連結させます。
あとは、HTTPリクエストをするだけです。
これでHTTPリクエストすることによって、レスポンスが返ってきます。
POST パス(例:/oauth/request_token) HTTP/1.1 Host: ホスト(例:api.twitter.com) Content-Type: application/x-www-form-urlencoded Content-Length: 下の文字列Aの長さ 文字列A
成功すればレスポンスが以下のように返ってきます。
oauth_tokenとoauth_token_secretに分けてください。それらがリクエストトークンです。
oauth_token=HOGEHOGE&oauth_token_secret=hogehoge&oauth_callback_confirmed=true
指定された認証用URLを表示して、PINと呼ばれる文字列の入力を促しましょう
アクセストークンの取得
だいたい上と同じ方法ですが、含めるパラメータが違います。
上のパラメータに加えて、
- oauth_token
- 発行されたリクエストトークンをパーセントエンコードします
- oauth_verifier
- ユーザーに入力してもらったPINを指定します
ConsumerSecret(パーセントエンコード)&oauth_token_secret(パーセントエンコード)
にしてやります。
これでリクエストするとレスポンスがかえってきますので、保存します。
これがアクセストークンと呼ばれる物です。
これを使ってリクエストします。
