twitter4jを使ったOAuth認証の流れ

はじめに

 前回の記事*1は、twitter4jのサンプルプログラムをGAE上で動作させるに終わった。
 今回はまず、サンプルプログラム*2を読解することで、OAuth認証の正しい流れを理解する。またその過程で発見した、開発者自身が簡単にOAuth認証を受ける方法についても、簡単に記述する。

(10/25追記)この記事は中盤端折りすぎた感があるので、気が向いたら増強版に差し替えたいと思います(追記ここまで)

OAuthによる認証

任意のユーザが利用

 ここでもう一度、アプリケーションを中心として、OAuth認証の流れを確認する。

  1. ユーザからOAuth認証を受ける様に指示される
  2. Provider(twitter)に、ConsumerKeyなどを渡し、リクエストークンを要求する
  3. Providerから、リクエストークンが返ってくる
  4. 発行されたリクエストークンを用いて、ユーザをProviderの認証ページにリダイレクトする
  5. (アプリケーションの与り知らぬ所で)ユーザはProviderに承認を指示し、ProviderがアプリケーションのコールバックURLまでリダイレクトしてくれる
  6. 承認されたアプリケーションは、リクエストークンなどを用いて、アクセストークンをProviderに要求する
  7. 以降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。取得の仕方は、以下の通りである。

  1. Twitter Applications | dev.twitter.comにアクセスして、アプリケーション登録をしたユーザアカウントでログイン
  2. アクセストークンを取得したいアプリケーションを選択
  3. 右サイドバーにある「My Access Token」へ

 たったこれだけの手順で、アクセストークンを直接取得できる。実際にこれからbotを作る時には、この方法でアクセストークンを取得したい。
 なお、この場合にはtwitter4jのAccessTokenクラスのインスタンスを、以下のコンストラクタで生成すれば良いと思われる。

AccessToken(java.lang.String token, java.lang.String tokenSecret) 

 これについては、また近いうちに試す事になるだろう。

まとめ

  • OAuth認証twitter APIを利用する場合、最終的にはアクセストークンと呼ばれる物を使っていく必要がある
  • アクセストークンを取得する為には、まずリクエストークンを生成する必要がある
  • 開発者以外利用しないアプリや、テストアプリである場合、twitterの開発者向けページからアクセストークンを直接取得できる

次回

 サンプルプログラムを改造して、タイムラインを取得、表示できる様にしたい