OpenID v.s. OAuth

巷間よくOpenIDは認証、OAuthは認可というようなことが言われる。もともとは、アメリカのOAuth関係者が言い始めたことである。

もちろん間違いである。

これは、OpenIDとOAuthのシーケンス、特に OpenID の Artifact Binding と OAuth のを比べてみるとよくわかる。すぐ分かるように、これらはほとんど同じである。違いは、

  1. OAuth では、Consumer Key と Consumer Secret を取得する。OpenIDでは、Consumer Key にあたるのは realm, Consumer Secret にあたるものは、Association として、動的取得される。
  2. OAuth で使う Identity は、当該 Service Provider にユーザーが登録した Identity である。OpenIDでは、ユーザーが選んだ Identity から、Service Provider を動的に特定する。
  3. OpenIDでは、基本的にすべてHTTPのqueryとしてパラメータを送る。OAuthでは、HTTP Header も利用する。

といったところが、主要なところであろう。

つまり、OAuth は、Service Provider を中心とした、静的な関係性の中でのフレームワークであるのに対して、OpenIDは、User を中心とした、動的な関係性の中でのフレームワークであるということになる。動的な「発見 (Discovery)」が必要無くなる分、OAuth の方が単純になるが、そこで「諦めている」のは、「ユーザー中心主義」という哲学であり、機能である。

一言でいうならば、こういう事であろう。

  • OAuth は、サービス提供者中心主義だが、より簡単
  • OpenIDは、ユーザー中心主義だが、より複雑

まぁ、OpenID も、discovery の仕様のバグで、XRIを使っているとき以外は、ちゃんと deligation できないので、結果的にService囲い込みされちゃうんですが、哲学の問題ということで…。この辺は、3.0 でちゃんと直すのでしょうね。

というわけで、OAuth より、OpenIDに私は熱が入っているわけです。
OAuth の使い方としてはどちらかというと、OpenIDのための、下回りのプロトコルかなぁと。ただ、それにはちょっといろんなものを積み込みすぎで、その点、Wrap の方が使いやすそうですね。

(表1) OpenID と OAuth の比較

項目 OpenID OAuth
IdPの名称 OP (OpenID Provider) SP (Service Provider)
RPの名称 RP Consumer
RPの識別 realmから自動で識別 Consumer Keyを事前に手動で取得
署名鍵の交換 Associationで動的に交換 手動で事前に交換
ユーザー識別子 ユーザーが選択したOpenID対応識別子 SPがユーザーに与えた識別子
Artifactの名称 Artifact Request Token
Assertionの名称 Assertion Access Token
根底にある哲学 ユーザー中心主義 サービス提供者(アプリケーション)中心主義

コメントを残す

メールアドレスが公開されることはありません。

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください