日向夏特殊応援部隊

俺様向けメモ

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 もきちんと考えて作られてるので、プライバシーが云々言う人への配慮もきちんとされてる模様でございます。

*1:以前 Yahoo! がそうじゃないかと言う誤報があったやつ

モバイル用の OpenID 考

いつか書こうと思って書いてなかったので。ちなみにモバイルサイト開発は不得手と言うか余り経験が無いので、突っ込み歓迎です。

またモバイルの世界に OpenID なんて(ry ってのは今は考えない。

特徴

Cookie と個体識別番号

RP サイドで、アサーションのレスポンスに対する中間者攻撃を防ぐ為に Cookie を事前に発行しておくなんていう対策を採る訳ですが、これは別にリクエスト時の個体識別番号と一致してれば良いので、モバイルでの場合に例外的な扱いはするものの技術的には Cookie が無くても問題は無さそう。

URL の最大長

こっちは引っかかる可能性がある。512バイトまでが共通して言える安全な長さだとすると、Indirect Communication 時に GET を用いる場合に引っかかる場合がありそうだ。

リクエスト時 (checkid_setup/checkid_immediate) の場合は、POST を使えば回避出来ると思うんだけど、レスポンス時は結構な量のパラメータがくっついてくるので、これが実用上問題になる可能性がある。

恐らく必要最低限のパラメータに加えて、RP から OP に対しての問い合わせ用に token を発行しておいて、その token を用いて check_authentication するとかそういう風にすれば良さそうな気がする。

まぁそんな訳で

日本の場合、携帯事情が特殊かと思うのでモバイル用ってのは考えてもいいんジャマイカと思うます。