twitter4jを使ったOAuth認証の流れ
はじめに
前回の記事*1は、twitter4jのサンプルプログラムをGAE上で動作させるに終わった。
今回はまず、サンプルプログラム*2を読解することで、OAuth認証の正しい流れを理解する。またその過程で発見した、開発者自身が簡単にOAuth認証を受ける方法についても、簡単に記述する。
(10/25追記)この記事は中盤端折りすぎた感があるので、気が向いたら増強版に差し替えたいと思います(追記ここまで)
OAuthによる認証
任意のユーザが利用
ここでもう一度、アプリケーションを中心として、OAuth認証の流れを確認する。
- ユーザからOAuth認証を受ける様に指示される
- Provider(twitter)に、ConsumerKeyなどを渡し、リクエストトークンを要求する
- Providerから、リクエストトークンが返ってくる
- 発行されたリクエストトークンを用いて、ユーザをProviderの認証ページにリダイレクトする
- (アプリケーションの与り知らぬ所で)ユーザはProviderに承認を指示し、ProviderがアプリケーションのコールバックURLまでリダイレクトしてくれる
- 承認されたアプリケーションは、リクエストトークンなどを用いて、アクセストークンをProviderに要求する
- 以降APIの利用には、アクセストークンを利用していく
大体、こんな流れだった。実際にサンプルプログラムを参照すると、1〜4までをSigninServletが、6をCallbackServletが行っている事が分かる。
src/main/java/twitter4j/examples/signin/SigninServlet.java at master from yusuke's sign-in-with-twitter - GitHub
src/main/java/twitter4j/examples/signin/CallbackServlet.java at master from yusuke's sign-in-with-twitter - GitHub
アクセストークンの取得には、今回のようなコールバックURLに返されるパラメータ"oauth_verifier"を使う場合と、コールバックさせずにPIN番号を用いる方法がある。しかし、今回の様にWebアプリケーションのユーザ認証としても運用する場合、"oauth_verifier"を利用する必要が有るようだ*3。ただ、Webアプリケーションであれば、ユーザの利便性やプログラムの簡便性も考えて、前者の方法を採用する方が自然だろう。
また、ローカルアプリなどの場合は、いずれかの方法で得たアクセストークンをアプリケーション側で保存して使いまわすと良い。
開発者のみが利用
開発者のみがそのアプリケーションを利用する場合、例えばbotなどのプログラムを動作させる場合、わざわざ一からアクセストークンを取得させるのは面倒である。これに対して、twitterでは開発者向けに直接アクセストークンを公開している*4。取得の仕方は、以下の通りである。
- Twitter Applications | dev.twitter.comにアクセスして、アプリケーション登録をしたユーザアカウントでログイン
- アクセストークンを取得したいアプリケーションを選択
- 右サイドバーにある「My Access Token」へ
たったこれだけの手順で、アクセストークンを直接取得できる。実際にこれからbotを作る時には、この方法でアクセストークンを取得したい。
なお、この場合にはtwitter4jのAccessTokenクラスのインスタンスを、以下のコンストラクタで生成すれば良いと思われる。
AccessToken(java.lang.String token, java.lang.String tokenSecret)
これについては、また近いうちに試す事になるだろう。
まとめ
次回
サンプルプログラムを改造して、タイムラインを取得、表示できる様にしたい