Windows Live ID の OpenID を試してみたよ
先月末から Community Technology Preview と言う形で Windows Live ID が OpenID Provider サービスを提供しているので試しに使ってみました。
ちなみに 2.0 のみ対応と言う形式みたいです。
まずは取得
最初にテストアカウントを作らねばならないみたいです。https://login.live-int.com/ に飛んで Sign Up しないとダメっす。一通りサインアップが終わったら https://login.live-int.com/beta/ManageOpenID.srf で自分の OP Local Identifier の alias を定義します。とりあえず僕の場合は、http://openid.live-int.com/zigorou としました。
XRDS を見てみる
OP Identifier である "openid.live-int.com" に対して。
$ lwp-request -S -e -d -H "Accept: application/xrds+xml" http://openid.live-int .com/ | grep "X-XRDS-Location" X-XRDS-Location: http://openid.live-int.com/OpenIDXRDS.srf
とのことなので、
$ lwp-request http://op-e http://openid.live-int.com/OpenIDXRDS.srf
とすると、
<?xml version="1.0" encoding="UTF-8"?> <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/server</Type> <URI>https://openid.live-int.com/OpenIDAuth.srf</URI> <LocalID>http://specs.openid.net/auth/2.0/identifier_select</LocalID> </Service> </XRD> </xrds:XRDS>
次に OP Local Identifier である http://openid.live-int.com/zigorou に対して、
$ lwp-request -S -e -d -H "Accept: application/xrds+xml" http://openid.live-int .com/zigorou | grep "X-XRDS-Location" X-XRDS-Location: http://openid.live-int.com/OpenIDXRDS.srf?oidn=zigorou
なので、
$ lwp-request "http://openid.live-int.com/OpenIDXRDS.srf?oidn=zigorou"
とすると、
<?xml version="1.0" encoding="UTF-8"?> <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/signon</Type> <URI>https://openid.live-int.com/OpenIDAuth.srf</URI> <LocalID>http://openid.live-int.com/zigorou</LocalID> </Service> </XRD> </xrds:XRDS>
って感じ。
anonymous alias がいい感じ
OP Identifier 使った identifier_select による認証の場合、
にあるように、anonymous alias が選べます。これはどうやら RP ごとにユニークな値が使えるみたいなんで名寄せに強いものだと言えます。*1
まとめ
Windows LiveID の OP 実装は、サインアップの時のフローとかが微妙な気がする点を除けば、普通の OP って感じです。OP Endpoint URL もちゃんと https 使ってますし。
anonymous alias もきちんと考えて作られてるので、プライバシーが云々言う人への配慮もきちんとされてる模様でございます。
モバイル用の OpenID 考
いつか書こうと思って書いてなかったので。ちなみにモバイルサイト開発は不得手と言うか余り経験が無いので、突っ込み歓迎です。
またモバイルの世界に OpenID なんて(ry ってのは今は考えない。
特徴
- 携帯電話の場合は個体識別番号って奴があって、それを無条件に垂れ流してるので一意な値と言うのは取れると。
- Cookie のサポートはキャリアや機種ごとにまちまち。
- 許容する URL の最大長問題 (携帯電話のブラウザでアクセスできるURLの文字数に制限はありま… - 人力検索はてな、正確な情報かどうか未確認だけど参考数値として)
Cookie と個体識別番号
RP サイドで、アサーションのレスポンスに対する中間者攻撃を防ぐ為に Cookie を事前に発行しておくなんていう対策を採る訳ですが、これは別にリクエスト時の個体識別番号と一致してれば良いので、モバイルでの場合に例外的な扱いはするものの技術的には Cookie が無くても問題は無さそう。
URL の最大長
こっちは引っかかる可能性がある。512バイトまでが共通して言える安全な長さだとすると、Indirect Communication 時に GET を用いる場合に引っかかる場合がありそうだ。
リクエスト時 (checkid_setup/checkid_immediate) の場合は、POST を使えば回避出来ると思うんだけど、レスポンス時は結構な量のパラメータがくっついてくるので、これが実用上問題になる可能性がある。
恐らく必要最低限のパラメータに加えて、RP から OP に対しての問い合わせ用に token を発行しておいて、その token を用いて check_authentication するとかそういう風にすれば良さそうな気がする。
まぁそんな訳で
日本の場合、携帯事情が特殊かと思うのでモバイル用ってのは考えてもいいんジャマイカと思うます。