OpenIDは何を提供してくれるのか?

さて、近いうちにXoopsにOpenIDを組み込むとして、では OpenIDは何を「Relying Party (RP)」(この場合は、情報提供元としてのXoops)に何を提供してくれるのか?

OpenIDは、今、訪れようとしている人が自分のWebページであると宣言したURLの持ち主であるという事を(そのWeb Pageがクラックされていないとして)認証している。逆に言うとそれだけだ。Blogにコメントをする際の認証としては十分だろうが、よりバリューの高いサービスを提供する場合には、別のものと組み合わせることになるのだろう。

例えば、王分市(おーぷんし)に住んでいる人に対するサービスの場合(例:王分市民割引のあるインターネット本屋)、OpenIDでログインしてきた人がそのサービスを利用する事を認可するには、OpenIDを認証するだけでなく、そのOpenIDの持ち主が王分市民であるということを認証してくれるサービスに行って、そのAssertion もあわせて持ってきてくれということになるであろう。

その場合は市役所がその属性認証サービスの提供者になるのが自然だと思うので、そういうことにして話を進めてみる。

王分市はおそらく、内部では市民番号とかそういうもので管理しているだろう。このサービスを提供するには、この区民番号とそのユーザのOpenIDを結びつけなければ成らない。たとえば、そのユーザの区民番号が 12345678 で、OpenID が http://example.com/suzuki だったら、一回、この両者を結びつける事をどこかでやっておかなければ成らない。最初の1回は、転入時かなにかに紙で申請するのかな…。もともと王分市としてもOpenIDを提供しているという事も考えられる。転入すると、OpenIDが提供されるのだ。仮にそのOpenIDが、http://open-city.or.jp/12345678 だったとしよう。(以下うざいので http:// は省略。)

すると、この open-city.or.jp/12345678 の属性として、example.com/suzuki を登録しておくことができれば良い。そうなっていれば、example.com/suzuki が 王分市民であると証明できることになる。方法は2つ。

(1)RP 側が、open-city.or.jp に query をかけて、属性を確かめる。
   この場合、example.com/suzuki さんが、あらかじめこの属性を公開するルールを
   設定してあるか、あるいは、何らかの形で個別承認を与えるような形になって
   いる必要がある。
(2)example.com/suzuki 側が、open-city.or.jp で Assertion を取得して、
   これを提示する。
   Consumer 側が、ユーザに、市民である事を open-city.or.jp で証明してきて♪と
   言って、おそらく One-time session ID をつけてリダイレクトする訳だ。
   すると、ユーザは example.com/suzuki としては
   すでにログイン済みだから SSO で open-city.or.jp に自動でログインして、
   example.com/suzuki という URL に市民証明サインをしてもらって、Consumer に
   もどる。(もっと安全にしたければ、One-time session id を Consumer が
   ふりだして、それに署名してもらうのでも良い。)
   すると、やはり市民だという事が証明される。

まぁ、(1) も (2) もほとんど等価だな。(というか、SAML には、両方とも Binding があるような…。)

本当は、ここまで来て、やっと役に立つというところか。

しかし、便利そうではある。

問題は、OpenIDとして使った example.com/suzuki が、違う人によって再利用される可能性があるという事だ。鈴木一郎さんが最初は example.com/suzuki を使っていたとしよう。しかし、ある時から彼はこのプロバイダーをやめて、newexample.com/suzuki に移動してしまったとしよう。普通におこりそうなことだ。これ自体は問題ない。しかし、次に黒須市民の鈴木花子さんが example.com に加入して、 example.com/suzuki を使いはじめたとしよう。しかも、鈴木一郎さんは、open-city.or.jp/12345678 を更新し忘れていたとしよう。すると、上記(1)のシナリオの場合、鈴木花子さんは、黒須市民であるにも関わらず、王分市民割引を得る事ができてしまう。(ということは、(2)の方が望ましいという事ですね。)

この問題を回避するには、IDが再利用されない事を保証すれば良いのですが、OpenIDだけのフレームワークでは難しそうですね。

そういう観点からも OpenIDは i-name を取り入れているのかな?(Drummond に聞いてみよう…。)i-name だと、i-number (i-name を取得すると必ず振り出される絶対番号。絶対に再利用されない。)がその下にあって、機械はこちらを使うようになっているので、上記、鈴木一郎さんの example.com/suzuki と鈴木花子さんの example.com/suzuki を混同することはないから。


† ちなみに、OpenID Attribute Exchangeというものが検討されている。
 これはまた別の機会に取り上げることにしよう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

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