巷間よくOpenIDは認証、OAuthは認可というようなことが言われる。もともとは、アメリカのOAuth関係者が言い始めたことである。
もちろん間違いである。
これは、OpenIDとOAuthのシーケンス、特に OpenID の Artifact Binding と OAuth のを比べてみるとよくわかる。すぐ分かるように、これらはほとんど同じである。違いは、
- OAuth では、Consumer Key と Consumer Secret を取得する。OpenIDでは、Consumer Key にあたるのは realm, Consumer Secret にあたるものは、Association として、動的取得される。
- OAuth で使う Identity は、当該 Service Provider にユーザーが登録した Identity である。OpenIDでは、ユーザーが選んだ Identity から、Service Provider を動的に特定する。
- 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 |
根底にある哲学 | ユーザー中心主義 | サービス提供者(アプリケーション)中心主義 |
@_Nat Zoneをもっと見る
購読すると最新の投稿がメールで送信されます。