【決定版】Twitter APIにも使われるOAuth認証のしくみ

Twitter用の自作BotをPHPで作る際に勉強したんですが、なかなか複雑で理解するのに時間がかかってしまいました。 理解度を確認する意味でも、自作のWebアプリにユーザーのTwitterアカウントを紐付けてTwitter APIを利用するシーンを想定して解説してみようと思います。

「アクセス・トークン(Access Token)」をTwitterから得るのが目標です

OAuthによる認証がうまくいくと、Twitterのような既存のサービスで管理されているユーザーアカウントを自分のWebアプリ上とも共有できるようになります。

そのためには、ユーザーごとに「アクセス・トークン(Access Token)」というものをユーザー情報管理サービス側(今回の場合はTwitter)から発行してもらう必要があります。

アクセス・トークンとは何ぞ?

OAuthによる、ユーザーID+パスワードとアクセス・トークンとの関連性

アクセス・トークンというのは、Twitterへツイートする際にログインする場合のアカウント情報(ユーザーID+パスワード)を暗号化してまとめた文字列です。

OAuthというのは、ユーザーアカウント情報を共有して、提供されているAPIを利用できるようにするしくみなのですが、Twitter側からしたら、共有とは言えどID+パスワードをそっくりコピーさせるわけにはいきません。

そんなことをしたら、セキュリティ・リスクになったり、ユーザーがパスワードを変えたい場合も1箇所ではすまなくなったりで大変なことになってしまいます。

あくまで自作のWebアプリが得られるのは、ユーザーアカウントのショートカット(エイリアス)情報みたいなものだけです。 それがアクセス・トークン。

アクセス・トークンはユーザーごとに異なる

Webアプリにアクセス・トークンを記憶させておけば、ユーザーID+パスワードがなくてもユーザー認識できるわけなんですね。 ユーザーID+パスワードの代わりに使える。

つまり自作のWebアプリ経由でツイートなんかもさせることができるわけです。

でも、この「アクセス・トークン」はすぐに得られるわけではありません。 当然ながらアクセス・トークンはWebアプリを利用するユーザーごとに異なった文字列だからです。

Botアプリを作る人は、事前にアプリケーション登録をしたユーザー情報から簡単にアクセス・トークンを取得できます。

ではどうしたらアクセス・トークンを得られるのか?

サルでも分かる「アクセス・トークンを得るための3ステップ」

ステップ1:合言葉(リクエスト・トークン)を発行してもらう

今までTwitterサイトでツイートしていたユーザーであってもそうでなくても「Webアプリを使ってツイートするから」ということになるわけですから、新たにTwitterに申請する必要があるんですね。

申請するようにユーザーに促すのはWebアプリ側の作業になります。
Webアプリ側は、申請からアクセス・トークンを得られるまでの作業をユーザーが秘密裏に行えるように、Twitterに対して「リクエスト・トークン(RequestToken)」という合言葉を発行してもらうようにお願いします。

リクエスト・トークンを発行してもらうまでの手順

さしずめ「開けゴマ!」みたいなものですね。 合言葉自体はWebアプリ側からは決められません。 残念(笑)

で、このリクエスト・トークンはWebアプリがTwitterからアクセス・トークンを発行してもらうまでの間、通信の際に合言葉として使われていくのです。

ステップ2:ユーザーを申請する

次は、利用するユーザーをTwitterに申請します。

これもWebアプリの作業なんですが、Webアプリを利用するユーザーを申請するためのページをTwitterに教えてもらいます。

ユーザーに認証の許可を案内するための手順

Twitterはリクエスト・トークンの情報を利用して申請ページを作ってWebアプリ側へ伝えます。 Webアプリ側はユーザーにそのURLを教えて誘導してあげるわけです。

ステップ3:証明情報を申請してようやくアクセス・トークンをゲット!

ユーザーが申請ページでWebアプリ利用を許可すると、Webアプリが事前に設定しておいたページ(コールバック・ページ)に戻ってきます。

そのときに申請が完了した証明情報(OAuth Verifier)が付いてくるので、あとは前から持っていた合言葉(リクエスト・トークン)と証明情報(OAuth Verifier)をもってTwitterにアクセス・トークンを要求します。

アクセス・トークンを取得するまでの手順

すると、Twitterからアクセス・トークンが返ってくるので、ユーザーごとにデータベースに保存して、Webアプリで利用できるようにします。

以降は、このアクセス・トークンさえあればWebアプリ経由でTwitterにツイートしたり、ユーザーのプロフィール情報を取得したりすることができるようになります。

以上! 分かりやすく説明してみたつもりですがどうでしたか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

2010-09-04