2011年6月3日金曜日

OAuthとは何か?

OAuth(1.0)については、ゼロから学ぶOAuthとかAPIアクセス権を委譲するプロトコル、OAuthを知るあたりで色々と説明されているけど、忘れた時にふと読み返すには少し記事が長いと思う。

今回は、ざっくりとOAuthとは何か、その承認プロセスはどんな感じかを自分なりに短くまとめてみる。


何をするためのものか

例えば、自分のGoogleカレンダーを見やすく表示してくれるアプリケーションがあったとする。これを利用するには、アプリケーションの入手の他に、Googleカレンダーデータの取得が必要になる。

Googleカレンダーデータの取得を実現する一番簡単な方法は、アプリケーションにGoogleのIDとパスワードを設定すること。でも、IDとパスワードをアプリケーションに設定するのがちょっとイヤな場合がある。Webアプリケーションなどがそれ。

そんな時、OAuthを使うとGoogleのIDとパスワードをアプリケーションに教えることなく、やりたいことが実現できる。


OAuthのプレイヤー

OAuthでは、下記3つのプレイヤーが鍵になってくる。

サービスプロバイダー

GoogleやTwitterなどに代表されるサービスプロバイダーは、OAuthにおいて最も重要な役割を担っている。エンドポイントの提供、各種トークンやベリファイアの発行を行う。

コンシューマ
サービスプロバイダーが提供するAPIを利用してユーザーのデータを扱うアプリケーション。

ユーザー
アプリケーション利用者であり、サービスプロバイダーに会員登録をしている。


OAuthで使用する要素

OAuthを実装するにあたって基本的な要素を理解する必要性がある。

トークン(token/token secret)

トークンとトークンシークレットで1組の鍵データであり、コンシューマトークン、リクエストトークン、アクセストークンの3種類が存在する。

コンシューマトークン(consumer token/consumer token secret)
サービスプロバイダーがアプリケーションに対して発行するもの。アプリケーションを識別するために利用する。

リクエストトークン(request token/request token secret)
リサービスプロバイダーがアプリケーションに対して一時的に発行するもの。ユーザーがアプリケーションを承認するプロセスでのみ利用する。

アクセストークン(access token/access token secret)
サービスプロバイダーがアプリケーションに対して発行するもの。ユーザーデータにアクセスし放題になる重要情報。アクセストークンさえあればOAuthを利用した各種APIの利用が可能になる。

ベリファイア(verifier)
ユーザーがアプリケーションを承認するプロセスの最終段階で利用するもの。PINコードと呼ばれたりする。サービスプロバイダーがユーザーに対して発行するものであり、さらにユーザーがアプリケーションに渡し、最後にアプリケーションがリクエストトークンとセットでサービスプロバイダーに投げつける。

エンドポイント(Endpoint)
サービスプロバイダーが公開しているOAuth認証プロセスに必要な機能を備えたURI。リクエストトークンを発行するためのエンドポイント、ユーザーが承認を行うためのエンドポイント、アクセストークンを発行するためのエンドポイントが存在する。

OAuth 1.0 API Reference(Google)とかTwitter REST API Method: oauth request_token(Twitter)に書いてある。


承認プロセス

まず、アプリケーションの登録

アプリケーションの登録方法はサービスプロバイダーによって違うけど、基本的には専用のWebサイトでアプリ登録を行い、コンシューマトークンを得るという作業になる。

Googleの場合

ここにアクセスし、画面の指示に従う。が、完全なクライアントアプリケーションを作りたいよーという場合には、すっとばしてOK。コンシューマトークンには"anonymous"という文字列を利用すれば良い。

Twitterの場合
ここにアクセスし、画面の指示に従う。Twitterの場合はWebアプリケーションでもクライアントアプリケーションでも同じ。



リクエストトークンの取得

リクエストトークンを発行するためのエンドポイントに対して、必要なパラメータを設定したHTTPリクエストを発行し、レスポンスとしてリクエストトークンを得る。



ベリファイアの取得

ユーザーが承認を行うためのエンドポイントへユーザーにアクセスしてもらう。その際、oauth_tokenパラメータとして先に取得したリクエストトークンを付与する。ユーザーが承認を行うとベリファイアを得ることができる(サービスプロバイダのサイト上に表示されるか、指定したURLへのリダイレクトかのいずれか)。



アクセストークンの取得

アクセストークンを発行するためのエンドポイントに対して、必要なパラメータを設定したHTTPリクエストを発行し、レスポンスとしてアクセストークンを得る。



終わり

この長い旅路を終えて得たアクセストークンが、OAuthを認証方式に採用しているAPIを利用するために必要なものになる。

0 件のコメント:

コメントを投稿