キノコの自省録

テクノロジーとコンテンツの融合を目指して

AIR/ActionScript3でTwitterのOAuthをするための必要最低限

OAuth面倒くさいので、AIR/AS3で最低限認証通るようになるまでのメモ。


準備

Twitterにアプリケーション登録。
https://twitter.com/apps

OAuthライブラリ。iotashan氏作のものを利用。
http://code.google.com/p/oauth-as3/
ライブラリを使わず、OAuthを1から叩くと死ねます。


やること

1. RequestToken取得
2. PINコード取得
3. AccessToken取得


1.RequestToken取得

OAuthConsumerオブジェクトを生成。
keyにTwitterから取得したConsumer keyと、
secretに同じく取得したConsumer secretを設定する。
OAuthRequestオブジェクトを、
RequestTokenのURL(http://twitter.com/oauth/request_token)と、
OAuthConsumerオブジェクトをコンストラクタ引数に渡して生成。
HTTPMethodはGETで良い。


さらに、OAuthRequestオブジェクトから、buildRequestメソッドをコールして、
URLを取得する。
引数にはnew OAuthSignatureMethod_HMAC_SHA1()を渡しておく。
このURLをHTTPServiceなどを使ってHTTP GETを投げる。
成功すると、oauth_tokenとoauth_secretが戻ってくる。
oauth_tokenがRequestToken Keyで、oauth_secretがRequestToken secret。


簡単な説明。
ここでは、RequestTokenというものをTwitterから取得します。
登録アプリケーションを識別するConsumer keyを渡すことがメインなのですが、

ただConsumer keyを渡すのではなく、Consumer secretを利用して、
ハッシュ化(SHA1)したものを渡します。

↑ウソ書きました。Consumer keyはそのまま飛んでいきます。
ハッシュ化はシグネチャ(oauth_signature)を作成する時に行います。
その他、timestampやnonceといった文字列も必要なのですが、buildRequestが自動生成します。
ちなみに、OAuthの規格では、signatureを平文で渡しても良いことになっていますが、
Twitterは平文での通信を認めていません。


2.PINコード取得

1.で取得したRequestToken keyをパラメータとして、
Authorize URLにアクセス。
直に書くと、
https://twitter.com/oauth/authorize?oauth_token=取得したRequestToken Key
このURLはnavigateToURLなどを使ってブラウザを起動します。
ユーザに利用許可を求める画面に移ります。
ユーザが許可を出すと、7桁のPINコードが表示されるので、これを保存します。
このPINコードはoauth_verifierとして後で使います。


Webアプリの場合はoauth_callbackというパラメタを指定すると、
指定先にリダイレクトしてくれますが、
AIRなどのデスクトップの場合、他の方法でPINを保存する必要があります。
若干面倒です。


3.AccessToken取得

ここが厄介なので、コード風に記述。


var consumer:OAuthConsumer = new OAuthConsumer(Consumer key, Consumer secret);
var reqToken:OAuthToken = new OAuthToken(Request token key, Request token secret);
var request:OAuthRequest = new OAuthRequest("GET", access_token url, {oauth_verifier: PIN, oauth_version: "1.0"}, consumer, reqToken);
var url:String = request.buildRequest(new OAuthSignatureMethod_HMAC_SHA1());

このurlをHTTPServiceなどでHTTP GETします。
戻り値のtokenとsecretが、永久保存版のAccess Tokenです。
AccessTokenの取得でやっていることはかなりわかりづらいので、
生成したurlをtraceなどで観察するといいと思います。
このページが特に参考になるかと。

Twitter API を OAuth で認証するスクリプトを 0 から書いてみた
http://techno-st.net/2009/11/26/twitter-api-oauth-0.html