前回、コメントで教えていただいたいただいた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にならないんじゃないかとちょっと思った今日この頃です。