SAML, OpenID, 双方向信頼関係
SAMLからは離れて久しいのだけれども、ちょっと自分の認識が合っているのかどうかが気になったので。
結局のところどうやって OpenID を使うかは, トランザクションに関与する主体のうち, だれが相対的に高いリスクを負うのかで決まる. たとえば 「橋の押し売り」 のケースであれば, おカネを払うことで本当に橋の所有権が得られるのか怪しいから, 買い手 (relying party) はいろいろな方法で “ACME bridge verification” の評判 (リピュテーション) を確認したり, あらかじめ信頼できる 「橋確認業者」 を勝手に自分の電話帳に書いておく (ホワイトリスト) ことになる.
http://blogs.sun.com/tkudo/entry/what_is_openid_deux
(中略)
はてさて, OpenID は今後, 前者のような 「relying party 側が高いリスクを負うトランザクション」 の基盤に組み込めるようになるんだろうか!? まあやってできなくはないだろうけど (Sure, we can invent one のくだりは皮肉がきいてておもしろい), 少なくとも現状は, SAML のような 「確立された信頼関係に基づく運用が大前提」 のしくみを使ったほうがいいと思う.
SAMLでの「確立された信頼関係」において気になるのは、Relying Party (RP: アイデンティティ情報をもらう人)がIdentity Provider (IdP: アイデンティティ情報を渡す人、認証サービス) を信頼しているという点の他に、IdP側もRPのリストを登録しておく必要があるというところなのだけど。つまり事前にIdPとRPの信頼関係が双方向に確立されてなければならないという。
一方OpenIDではIdPにもRPにもそういう事前の関係の必要はない(問題の外側)。ホワイトリストしているOpenIDってのは、その上での付加的な制約としてRPからIdPへの信頼が静的に決定されているという話であって、IdPからRPへ向かっての事前制約がない、という点においては、利点は失われてないと思うのだけど、この点はどうなのだろうか。
IdPホワイトリスティングされたOpenIDにおいて、RPは信頼するIdPを決定しているからまずリスクはなく、ユーザは自分の使いたいIdPのうち一番信頼に足るものをホワイトリストの中から選べるからまあそれほど悪くはなく(少なくともSAMLと比べて同等)、結局ビジネス上のリスクを負うのは、自らの保有資産である(と思い込んでいる?)アイデンティティ情報を世間一般に解放しなくてはならないIdPという形になるのかな。もしそれがIdPにおいて受け入れられないことだという意見であるなら、結局のところSAMLの「確立した信頼関係」と等価なものを追い求めることになるのかもしれない。
でも、そもそもIdPが抱えているところのアイデンティティ情報っていうのは、もともとユーザの持ち物であって、IdPは預かってくれているだけなのではないのか?それならば、アイデンティティを他のサービスに持ち運ぶか持ち運ばないかってのは、実際の所有者であるユーザによって決定されるべきではないのか?
たぶんこれがUser-Centiric Identityという思想(?)で、アイデンティティをIdPが保有する資産の一部であると考える Domain-Centricなモデルと立場的に決定的な違いがある。User-Centric Identityでは、どのアイデンティティを利用するのか、あるいは利用しないのかの決定は、IdPでもRPでもなく、ユーザ自身にある。アイデンティティ情報の利用先をIdPが制限している状態というのは、決してUser-Centricとは言い難い。
IdPへのRPの登録がRPからのセルフサービスになるようなケース(たとえばはてな認証APIとかは利用には事前登録が必要なので、つまりIdPは事前にRPを認識している訳だけど、べつにはてなが個々の開発者のWebサービスを信頼している訳ではない)をSAMLも許せるのであれば、もうちょっと広くユーザ側に開放されるだろうけど、残念ながら自分が触れたことのあるSAML製品ではそのような形での実装を見てない。もちろんこれは実装の問題かもしれないけど、これはそもそもそういう使われ方というのをあまり想定していないからなのではないか。
古くからSSOはシステム間の統合の課題だったから、その流れを汲むSAMLが静的な結合に近いのはまあ分かる。しかしそのままの状態で、誰もが自分のWebサービスを簡単に提供できるような将来において、スケールしていけるのだろうか?というところが疑問である。もちろん、そこに花はあっても実はならない、というスタンスでもありだと思うけど、ちょっとそれではつまらない。
その道のGuruを相手に無謀な意見を言っちゃいましたが、最後にちょっとこれは私見だけど、Digital Identity と LightweightなWebサービスは、2.0な世界ではものすごく近くなってる。一見遠いように見えるのだけど、同じ問題を違う方向から解こうとしてるのだと気づく。僕はどっちも中途半端な位置でいるけど、それでもそんな立場で眺めていると、みんなこれを機会にお互いを勉強してみようよ、などと思ったりする(というかもうちょい自分自身が勉強したい)