はい!今やってます!

Work Pertly, Live Idly

TwitterのOAuthの流れを整理しておく

これはなに

SPAでTwitterのOAuthを実装しようとしていたのだけど、 Twitter Developerで取得できる Consumer API key Consumer API key secret このあたりをどうやって隠蔽するのかというのを考えていたらよくわからなくなってきたので、 基礎知識としてサーバーサイドでTwitter認証する時の流れを整理しておく。 ※Consumer API keyは過去にConsumer tokenと呼ばれていたらしい。今は名前が変わった。

TwitterのOAuthの流れ

TwitterのDeveloperアカウントを設定して払い出されるConsumer API key,Consumer API key secretを使って、 任意のユーザーがAPIを呼び出すためのaccess_token,access_token_secretを得るのがゴール

流れは下記のとおり

  1. Consumer API key,Consumer API key secretを使ってrequest_tokenを得る
  2. https://api.twitter.com/oauth/authenticate?oauth_token={$request_token}に遷移
  3. oauth_tokenoauth_verifierを使ってアクセストークンを発行する

1. request_tokenを得る

まずはrequest_tokenを得る これはConsumer API key,Consumer API key secretを使って、oauth/request_tokenにPOSTリクエストを投げると取得することができる。 ちなみにoauth_callbackというパラメーターにTwitterDeveloperのcallbackに指定したURLのいずれかを設定してリクエストを送信する必要がある。

2. request_token認証を使って認証画面に遷移する

前の手順で得られたrequest_tokenoauth_tokenパラメーターにつけて

https://api.twitter.com/oauth/authenticate?oauth_token={$request_token}

というURLにアクセスすると、Twitter側の提供されるログイン画面に遷移する。 ※oauth_token={$request_token}がすでに気持ち悪いが気にしない。

3. アクセストークンを発行する

連携画面でログインが成功すると、callbackで指定したURLに遷移する。 遷移時のGETパラメーターに

oauth_token={$oauth_token}&oauth_verifier={$oauth_verifier}

という形でパラメーターが付与されるので、 Consumer API key,Consumer API key secret,oauth_token, oauth_verifierをつかって oauth/access_tokenに対してPOSTのリクエストを投げる。 するとaccess_tokenaccess_token_secretが得られる。

複雑なように見えるが実際は三度の通信が走るだけになっている。

※なおTwitterのOAuthはシグネチャを生成して、リクエストに含める必要がある。 リクエストパラメーターやtokenをひとまとめにしたデータを先性して、パラメーターを送信し整合性チェックを行う設計らしい。