これはなに
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
を得るのがゴール
流れは下記のとおり
Consumer API key
,Consumer API key secret
を使ってrequest_token
を得るhttps://api.twitter.com/oauth/authenticate?oauth_token={$request_token}
に遷移oauth_token
とoauth_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_token
をoauth_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_token
とaccess_token_secret
が得られる。
複雑なように見えるが実際は三度の通信が走るだけになっている。
※なおTwitterのOAuthはシグネチャを生成して、リクエストに含める必要がある。 リクエストパラメーターやtokenをひとまとめにしたデータを先性して、パラメーターを送信し整合性チェックを行う設計らしい。