OpenIDでPPIDの実装方法を確認した。

前回、コメントで教えていただいたいただいたICAMのドキュメントをみたら、さくっと書いてありました。

http://www.idmanagement.gov/documents/ICAM_OpenID20Profile.pdf
Final: OpenID Provider Authentication Policy Extension 1.0

OpenID Auth Request

RPはPAPE拡張を使ってこんな感じのパラメータをRequestに含んでOPに送ります。

openid.ns.pape : http://specs.openid.net/extensions/pape/1.0
openid.pape.preferred_auth_policies : http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier

OpenID Auth Response(Assertion)

OPからRPに返されるレスポンスはこんな感じなのがついて、realm単位で分けれらたclaimed_idとidentityが返される。

openid.ns.pape : http://specs.openid.net/extensions/pape/1.0
openid.pape.auth_policies : http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier

PPIDについて気になる点

なんだかんだいって、パートナー企業とはRPのドメイン、URLが変わったときのPPIDの移行処理を考慮する必要ありかも

WASForumの時に、@_nat さんが「OPがいなくなったときのユーザーデータ移行」の話を少しされていたと思いますが、PPIDについてはRP側の話をしましょう。

例えばiknowからsmart.fmに変わったようにRPのURL変更が起こったときに、ドメインまで変わったらさすがにrealmも変わっちゃうんでしょと。
PPIDのポリシーからいくとしょうがないので、もう一度0からOpenIDとのひも付けを行っていくか事前にユニークなメアドなどでユーザーを移行する必要性がでてきます。
もし、パートナー限定なOPをしていてPPIDを使っていたら、、、
そのあたりも考えてPPIDを実装するなら、いざというときのユーザー移行の手段も考慮してなければいけないかもしれません。

ユーザーへの見せ方

「PPIDの場合、同意画面などでユーザーにIDさらすべきですか?」
せっかくPPIDにして文字列自体の関連性を隠しているので、表示しないほうがいい気がします。
Googleはユーザーに見せていませんね。

どこまで隠す?

上の見せ方とも絡みますが、ユーザーに名寄せしたいRPが「(別のRP)さんのサイトに行ったときの同意画面に表示されるURLを教えてください」なんてことを言えば紐づけ可能になるかもしれません。気にしすぎかもしれませんが、これはユーザーがやることだからしょうがないのでしょうか?
って考えていくと、GETであれPOSTであれ、今のOpenIDではAssertionがIndirectCommなので、そこも隠した方がいい気がしてきました。

ではどうしましょうか?
「ArtifactBindingならDirectCommだし、SSLでも納得されないならAssertionをEncryptしてやりとりすればわりと隠せそうですよ。」

ということで、PPIDってよっぽど頑張らないとPPにならないんじゃないかとちょっと思った今日この頃です。