世の中の技術ドキュメントはどうも真面目でよろしくない。
まぁこれはSATOXが不真面目だからなんですが(笑)、もちろん技術的な内容や背景を知って然るべきとは思うものの、そんなものはきっと後から付いてくるんじゃないかと。
つまり、そんなことは後から教えてくれればいいので、どうすればOAuthで認証できるのかを教えてくれよ、と言うことです。
というわけで今回SATOXが勉強した、「TwitterをOAuth認証してAPIを利用する」までの流れだけを書いてみます。
まぁしこたま面倒です。
アプリの登録と文字列の取得
AOuthをTwitterで利用するためには、アプリケーションをTwitterのサイトで登録する必要があります。以下のサイトからアプリケーションを追加して下さい。
http://twitter.com/apps
登録すると、アプリケーションに紐付けられる以下の文字列が得られます。
- ConsumerKey
- ConsumerSecret
ちなみに、登録時にアイコンやアプリの説明文が必要なので予め用意しておきます。
文字列はぼかし加工を入れています。念のため。
オーサライズURLの取得準備
次にユーザがこのアプリケーションからのTwitter情報の取得を許可するためのTwitterサイトURLを取得する必要があります。このサイトで「連携アプリ」の登録を行うわけです。以下が生成するURLです。
GET
http://twitter.com/oauth/request_token?
oauth_consumer_key=[ConsumerKey]&
oauth_nonce=[Nonce]&
oauth_signature_method=HMAC-SHA1&
oauth_timestamp=[TimeStamp]&
oauth_version=1.0&
oauth_signature=[signature]
- TimeStamp
1970年1月1日から現在の秒数。 - Nonce
ランダムな数字。 - signature
上記のURLから[signature]を除いた文字列をURI化して、指定の暗号方式(SHA1)で[ConsumerSecret]キー使って暗号化し、URLエンコードしたもの。具体的には、"GET&" or "POST&" "http://twitter.com〜oauth_consumer_key=[ConsumerKey]&〜" をURLエンコードしてから暗号化します。
これで改ざんが防げるわけです。
オーサライズURLの取得
先のURLをGETで送信したレスポンスを解析します。oauth_token=[Token]&
oauth_token_secret=[TokenSecret]&
oauth_callback_confirmed=true
上記のようなレスポンスがありますので、[Token]を取り出します。
そして、以下のようにURLを作成します。
これがアプリの許可を行うためのサイトとなりますので、このサイトにユーザをアクセスさせます。
このとき、アプリ登録時に指定したアイコンと名前が表示されます。
アプリケーションの許可
アプリケーションの許可をさせるには上記のURLにアクセスします。ユーザはTwitterへのログインを促され、アプリケーションを許可するか否かのボタンが表示されます。ユーザが許可すると、ユーザのアカウントにアプリケーションが登録され、PIN(数字)が表示されます。
PINはぼかし加工を入れています。念のため。
このURLアクセス1回きりとなっており、2回目にアクセスしても無効ですので注意がが必要です。
PINを使ってTokenを取得する
PINと[Token]を使って次のTokenを取得します。[signature]は上記と同じ方法で作成します。大変です。GET
http://twitter.com/oauth/access_token?
oauth_consumer_key=[ConsumerKey]&
oauth_nonce=[Nonce]&
oauth_signature_method=HMAC-SHA1&
oauth_timestamp=[TimeStamp]&
oauth_token=[Token]&
oauth_verifier=[PIN]&
oauth_version=1.0&
oauth_signature=[signature]
以下、そのレスポンスです。
oauth_token=[Token]&
oauth_token_secret=[SecretToken]&
user_id=[TwitterId]&
screen_name=[ApplicationName]
非常に長いトークンが取得できます。
最後にポストしてみます
[ConsumerKey]とPINを使って取得した[Token]、それから[Signature]を作成するための[SecretToken]が必要で、これさえあればTwitterスクリーン名やTwitterパスワードなしにTwitter情報へアクセスすることが出来るようになるわけです。POST
http://twitter.com/statuses/update.xml
oauth_consumer_key=[ConsumerKey]&
oauth_nonce=[Nonce]&
oauth_signature_method=HMAC-SHA1&
oauth_timestamp=[TimeStamp]&
oauth_token=[Token]&
oauth_version=1.0&
status=[Status]&
oauth_signature=[Signature]
[Status]はツイートの内容。
これで、自分のアカウントに投稿することが出来ます。
OAuthの優れた点は、アプリケーションやサイトがTwitterのサービスをユーザのパスワードを知ることなく扱えるという点です。また、ユーザはその外部サービスをいつでも遮断することが出来るわけです。
まとめると、以下のような手順です。
ちなみにこれを使って何をするかはひみつ(笑)。
(1)アプリ開発者:ConsumerKey、ConsumerSecret取得。
(2)アプリ:Token、TokenSecret取得。
(3)ユーザ:アクセス許可し、PIN取得
(4)アプリ:新Token、新SecretToken取得。
(5)アプリ:今後、新Token、新SecretTokenを使ってアクセス。