読者です 読者をやめる 読者になる 読者になる

堕(惰)プログラマ開発記録

タイトル変えようかなとも思ってるけれど,思い浮かばない

OAuthの仕組み

twit-library

OAuthは慣れるまでが大変で、慣れてしまえば簡単に実装することができます。
基本的にOAuthは

  1. リクエストトークンの取得
  2. ユーザに認証を求める
  3. アクセストークンの取得
と行います。
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を取得します。

Data
メソッド&リクエスト先URL(パーセントエンコード)&文字列A(パーセントエンコード)
Key
ConsumerSecret(パーセントエンコード)&

これで得られた文字列を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を指定します

署名作成もほとんど同じですが、Keyを
ConsumerSecret(パーセントエンコード)&oauth_token_secret(パーセントエンコード)
にしてやります。

これでリクエストするとレスポンスがかえってきますので、保存します。
これがアクセストークンと呼ばれる物です。
これを使ってリクエストします。