今更ながら、Twitter APIのトークン周りについて
特にアクセストークン取得までの流れがちょっと複雑なので、メモしました。
Twitterトークンについて
以外にもTwitterトークンについての記事が少ないので、まずここからお話します。
トークンの種類
トークンの種類は大きく2種類あります。APIキーとアクセストークンです。
それぞれシークレットキー(またはシークレットトークン)を持っています。
基本的にAPI key
とAPI key secret
またはAccess Token
とAccess token secret
はペアで扱うので、まとめてAPIキー、アクセストークンといったりします。
トークンの種類 | 説明 |
---|---|
Consumer API key | API識別キー |
Consumer API key secret | API識別シークレットキー |
Access token | Twitterアカウントに対するアクセストークン |
Access token secret | Twitterアカウントに対するアクセストークンシークレット |
Consumer API key
は昔Consumer token
と呼ばれていました。APIを識別するためのキーなので、改名して正解だと思います。
※注意※
Twitter4JではConsumer token
の名残がクラス名や関数名に残っています。
混乱しないように気をつけましょう。
アクセストークンの取得
アクセストークンはTwitterクライアントのIDとパスワードみたいなものですから、流出しては大変です。
そのためアクセストークンを入手するためには、いくつかの手順を踏む必要があります。
連携リクエスト
API連携をアプリケーションサーバにリクエストしてから、PINコードがTwitterサーバから帰ってくるまでの図です(簡単にするためにかなり端折っています)。
ほとんど書いてあるとおりですが、一応説明を
最初、クライアントはアプリケーションサーバに連携リクエストを送信します。
連携リクエストを受けたアプリケーションサーバはTwitterに連携リクエスト送信し、リクエストトークンとauthorizantion URLを取得します。autorizantion URLはこのとき限りの一時的なURLです。
クライアントはauthorization URLにアクセスし、Twitterにログインした状態で連携ボタンを押すことでPINコードが得られます。
リクエストトークン + PINコード = アクセストークン
前の図の続きです。PINコード取得からアクセストークン取得までの流れになります。
クライアントは得られたPINコードをアプリケーションサーバに送ります。
アプリケーションサーバはリクエストトークンとともにPINコードをTwitterサーバに送ることで、アクセストークンを得ます。
最後にクライアントに対して連携成功のメッセージを送信すれば、連携完了です。
以降、アプリケーションサーバはAPI key
と取得したAccessToken
を用いて、Twitterアカウントへのアクセスが可能になります。
アクセストークン取得のポイント
リクエストトークン、authorization URL、PINコードはすべて紐付いています。
(リクエストトークンからauthorization URL、authorization URLからPINコードが生成されるイメージです)
また、リクエストトークン生成時のタイミングでは、Twitterアカウントと紐付いていません。
Twitterアカウントを紐付けるのはアクセストークンとPINコードになるので、実装するときは十分注意してください。
当時知らなかった私は、1回の連携リクエストに対して、2回リクエストトークンを発行してしまい、連携が上手くいきませんでした。
まとめ
本文では触れませんでたが、このような認可方式をOAuth認可方式と呼びます。
ユーザにユーザIDやパスワードを提供してもらうことなく、ユーザのアカウントにアクセスできるため、広く使われている手法です。
とはいえ、API key
とAccessToken
を奪われると、簡単にアカウントを乗っ取ることが可能になってしまうので、十分注意しましょう。