公開日:2007年6月28日
独立行政法人情報処理推進機構
セキュリティセンター
本ページの情報は2007年6月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。
OAuth 2.0は、アクセス認可の判断結果(誰々は、どこそこのリソースにアクセスしてよいということ)をネットワーク越しに安全に伝達することを目的としたプロトコル仕様である。このプロトコル仕様を公式に規定した RFC 6749,“The OAuth 2.0 Authorization Framework”(注釈)が2012年10月に発行された。
マッシュアップに使われる素材サーバ中のリソースを、資格あるユーザに対してのみ開示するように保護して制御する案件において、OAuth 2.0は有用な手段となる。
マッシュアップに組み入れるゲストリソースには、有償のものや守秘性の高いものもあり得る。このようなリソースを提供する素材サーバは、通常、アクセス制限を設け、これらを保護するようにする。このような際の仕組みのひとつとして、利用資格のある存在(コンピュータ)が何らかのセキュリティトークンを提示すると、引き換えにリソースを受け取れる、という方式がある。
主催者サーバは、所定のセキュリティトークンを添えて素材サーバへリソースを要求する。素材サーバは、そのセキュリティトークンが有効であることを確認した後に、主催者サーバへリソースを引き渡す。
上記の「セキュリティトークンと引き替えにリソースを得る構図」を実装するために、OAuth 2.0の「アクセストークン」 を利用することができる。
リソースの請求者からリソースの供給者へのアクセストークンの提示は、リソースを得ようとするHTTPリクエストの中にAuthorization: ヘッダを置き、そこへアクセストークンを記述することによって行われる。
ユーザ本人が素材サーバ内にもっているリソースを第三者(この場合はマッシュアップの「主催者サーバ」)に使わせたいケースがある。OAuth 2.0を利用して実装する際には、下図のようなフローでセキュリティトークンが発行され、主催者サーバによって行使される。
上記の処理のフローは、OAuth 2.0の中で複数のフローが定義されている中の、「Authorization Code」と呼ばれるタイプのフローである。このフローを含めて、OAuth 2.0仕様には4つのフローが定義されている。また、OAuth 2.0においては、これらのフローのタイプを「グラント種別」と呼んでいるので、以降、この「グラント種別」という用語を用いる。
4つのグラント種別(Grant Type)について、それぞれのフローを説明する。
「アクセス主体」(アクセストークンを行使し、保護されたリソースへのアクセスを行う存在) には、Webアプリケーションが想定される。
「アクセス主体」がアクセストークンの発行を受けるまでの流れ:
備考:リソース所有者は、ブラウザがやりとりするネットワーク通信が記録されるよう細工することによって、認可コードの値を知り得る。しかし、アクセストークンの値を知ることはできない。
「アクセス主体」には、JavaScriptコードを主な内容とするWebアプリケーションが想定される。
「アクセス主体」がアクセストークンの発行を受けるまでの流れ:
備考:ユーザ (リソース所有者) は、ブラウザがやりとりするネットワーク通信を記録することによってアクセストークンの値を知り得るという難がある。
Ajaxプログラミングの考察:
「アクセス主体」には、ブラウザを用いないアプリケーションプログラムが想定される。
「アクセス主体」がアクセストークンの発行を受けるまでの流れ:
備考:「アクセス主体」はユーザのパスワードを知ってしまうという難がある。
「アクセス主体」には、ブラウザを用いないアプリケーションプログラムが想定される。
「アクセス主体」がアクセストークンの発行を受けるまでの流れ:
備考:このClient Credentialsグラントは、ユーザ (リソース所有者) を認証しなくてもよい状況においてしかて使用できないという難がある。
上記以外のグラント種別を追加してもよいことが示唆されている。(RFC 6749, 「4.5 Extention Grants」)
4つのグラント種別のうち、どれを選択すべきであろうか?
結局のところ、Authorization Codeグラント種別を用いるのが最も無難である。
クライアントマシンで動作する独立アプリケーションであっても、Resource Owner Password Credentialsグラント種別ではなく、Authorization Codeグラント種別を用いている例がある。そこでは、プログラム中からブラウザを起動し、リソース所有者が直接Authorization Serverから認証を受けられるようにしている。
OAuth 2.0 のフローを構成するHTTPの各通信においてはTLS(SSL)を用いる必要がある。それは、次のような情報を第三者に傍受されないようにするためである。: