【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷

クロスドメインでのデジタルアイデンティティを守る

APIアクセス権を委譲するプロトコル、
OAuthを知る


作島 立樹
NRIパシフィック
2008/1/21



 OAuthプロトコルを知る

 OAuthを使ったWeb APIアクセス権の委譲が実際にどのように行われるかはエラン・ハマー氏のブログに詳しいが、簡単に説明すると、2つのアプリケーションをマッシュアップさせたい「ユーザー」が、リソース(例えば、アルバムサイトにある写真など)を管理するサイト「サービスプロバイダ」が提供するAPIの接続許可証「トークン」を、サービスプロバイダを通じて、リソースを利用したサービスを提供する別のサイト(例えば、写真を現像するサイト)「コンシューマ」へ発行し、IDとパスワードの代わりにトークンを渡してサービスプロバイダ上のリソースへアクセスさせる、ということになる。

(1) コンシューマは、APIを通じたユーザーリソースの利用者としてサービスプロバイダへ登録を要求する。【注3】
(2) サービスプロバイダは、コンシューマを表す一意のキーである「コンシューマ・キー」と署名に利用する「コンシューマ・シークレット」をコンシューマに発行する。

【注3】
このステップは、サービスプロバイダとコンシューマの間で一度だけ取り交わす必要がある。必ずしも、オンラインで動的に行われるとは限らず、電話やメールなどの方法でも構わない。コンシューマ・キーとコンシューマ・シークレットを発行して、安全にコンシューマに渡せる方法であれば何でもよい。また、API接続に利用するURLも、APIドキュメンテーションに書いておくなどして、コンシューマに知らせておく必要がある

(1) ユーザーはコンシューマのサービスを利用するために、Webブラウザでコンシューマにアクセスする。
(2) コンシューマはユーザーからサービスプロバイダのリソースを利用する意思を確認した後、サービスプロバイダに接続して「リクエスト・トークン」の発行を要求する。この際、コンシューマ・キーや、コンシューマ・シークレットを使って生成したサイン値などをパラメータとして渡す。
(3) サービスプロバイダはコンシューマから送られてきた値を確認した後、未承認の(Unauthorized)リクエスト・トークンをコンシューマに返す。
(4) 未承認のリクエスト・トークンを受け取ったコンシューマは、リクエスト・トークンにユーザーの承認を取るために、未リクエスト・トークンとともにユーザーをサービスプロバイダにリダイレクトする。
(5) サービスプロバイダはまずユーザーにログインを要求し、クレデンシャル(ユーザーIDやパスワードなど)を確認する。ユーザー認証が成功したら、ユーザーにコンシューマがアクセスするユーザーリソースの内容と条件を表示し、同意の確認を促す。
(6) ユーザーの同意が取れたら、リクエスト・トークンを「承認(Authorized)」にして、ユーザーとともにコンシューマへリダイレクトして返す。ユーザーが同意しなかった場合は「拒否(Denied)」にして返す。

(1) コンシューマは承認済みのリクエスト・トークン、コンシューマ・キー、コンシューマ・シークレットで生成したサイン値などをパラメータとしてサービスプロバイダに送って、「アクセス・トークン」の発行を要求する。
(2) サービスプロバイダはコンシューマから送られてきたパラメータの値を確認し、問題がなければ、APIへの接続に必要なアクセス・トークンとそれを署名するのに利用する「トークン・シークレット」をコンシューマに返す。
(3) コンシューマはアクセス・トークン、コンシューマ・キー、トークン・シークレットで生成したサイン値などをパラメータとして送り、ユーザーリソースの入り口であるAPIに接続を要求する。
(4) サービスプロバイダはそれぞれのパラメータの値を確認し、問題がなければ、APIの応答データをコンシューマに返す。以後、サービスプロバイダがアクセス・トークンに付与した条件(リソースの種類・期間など)に応じて、コンシューマは(3)を繰り返してAPIを経由してユーザーのリソースにアクセスする。
図1 OAuthの動作

 OAuthプロトコルの特徴は、

  1. APIの接続確認にトークンを使うこと
  2. そのトークンはユーザーの同意に基づいてサービスプロバイダからコンシューマへ付与されること

の2点に要約できる。

 トークンは、サービスプロバイダがAPIのアクセス権を確認するのに利用する一意のキー(ランダムに生成された文字列)のことである。コンシューマからの接続要求に応じて、サービスプロバイダからコンシューマへ発行される。トークンを受け取ったコンシューマは自サイトでそれを保管し、APIへ接続する際にトークンをサービスプロバイダへ示すことで、トークンに付与された権限の範囲でAPIへアクセスできるようになる。

 サービスプロバイダがトークンを発行するか否かはユーザーの意思によって決められる。コンシューマはサービスを利用しにきたユーザーをいったんサービスプロバイダへリダイレクトし、サービスプロバイダ上でのユーザー認証を経た後、APIに接続するうえでの条件の確認を行ってもらう。ユーザーが条件に同意すると、今度はサービスプロバイダがトークンとともに、ユーザーをコンシューマへリダイレクトして返す。このリダイレクトを用いてユーザーから同意を取るフローはOpenIDから影響を受けている。

 OAuthを使うと、トークンに対し、APIを通じてアクセスできるリソースの種類や期間などを細かくコントロールできるようになるが、これらをどう行うかについては仕様で定義していない。定義しているのは、APIへの接続内容をサービスプロバイダ側で確認するのに必要なトークンの発行とそのやりとりの方法だけである。また、認証手段に関しても定義していない。サービスプロバイダのIDとパスワードで認証するのが一般的な方法のようだが、より強力な認証手段やOpenIDと組み合わせることも可能である。開発者にとってアクセスコントロールや認証の部分の開発で融通が利く仕様となっている。

2/3

Index
APIアクセス権を委譲するプロトコル、OAuthを知る
  Page1
マッシュアップの犠牲になるユーザーのアイデンティティ
TwitterのAPIアクセス権を委譲できないか?
Page2
OAuthプロトコルを知る
  Page3
プロバイダにとっても大きいOAuthのメリット
OAuthのこれから

関連記事
  OpenIDの仕様と技術 連載インデックス
  OpenIDが熱狂的に受け入れられる理由
  OpenIDを使ってみた
  「OpenIDはメアド同様に複数使い分けてもいい」、OpenID提唱者

Security&Trust記事一覧

ホワイトペーパーTechTargetジャパン

Security&Trust フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています