Hatena::ブログ(Diary)

Yet Another Hackadelic

2008-05-22

Attribute Exchange のメモ

いわゆる OpenID の属性交換拡張についての私的なメモです。

仕様

主要なもの。

多少関連する仕様。

現時点で AX をサポートしている OP

主要な OpenID Provider から対応している OP は自分が(ざっと)確認した感じでは下記の二つだけっぽぃです。

世界にどういう OP があるかを知りたい人は、

辺りから見ると良いです。

対応状況

実際に試してみた結果です。

HTTP method

sxipper は Discovery した後に UserAgent を OP にリダイレクトさせた場合は、華麗にスルーされた。(AXだけ)

一方myopenid.comはどちらでも行けた。

OP GET method POST method
myopenid
sxipper ×

少なくとも現時点で確実なのはPOSTであって、ブラウザで外部ドメインにPOSTするって事はformを使わないとダメだって事ですね。

しかも Discovery して associate が終わった後に作った checkid_setup/checkid_immediate 用のリクエストURL に沿った形で post するように form を作らないとダメです。

またこの form を JavaScript で動的に生成して POST したい感じなんだけど、万が一 XSS があったとすると意図せぬ結果になるかもしれないので、サーバーサイドで処理した方が確実かなと思います。*1

schema 別

これが非常に罠過ぎる件。

myOpenID supports only some attributes that can be exchange with OpenID Attribute Exchange, but you should care about Type URI, because myOpenID doesn't support Type URI described on "http://www.axschema.org/types/". You should specify Type URI with "http://schema.openid.net/" instead. [ruby

と rakuto さんが書いている通り、myopenid は schema.openid.net ベースの属性型指定をしないとノーリアクションです。

OP schema.openid.net openid.net/schema axschema.org
myopenid × ×
sxipper

また OpenID の spec-ml でも話題に挙がっていて、

要望があるなら議論するぜーって段階で止まってる。

schema.openid.net で定義されている型一覧

と言うものがどうも僕が探した限りだと spec には無いんですよねぇ。*2

どうも axschema.org で定義された物の authority 部を schema.openid.net に代えた物がそのまま通るようです。

だからどんな値があるかは、no title で見て、適宜置換すればOKっぽぃ。

TODO

  • SREG と共に使えるかどうか確かめる
  • checkid_immediate でも問題ないかどうか確かめる
  • @IT の記事化する(ぉぃ

と言う訳で次回は SREG/AX についてまとめようかなとか思ってたりしてます。

まとめ

少なくとも現時点で RP 側で AX を採用するってコストから考えると割りに合わなくて、簡単で普及している SREG を使うべきかなと思います。*3

また二点ほど、

  • OP への checkid_setup/checkid_immediate は POST で行うのが無難
  • schema は schema.openid.net を使うのが無難

が現時点でのバッドノウハウのようです。

SEE ALSO

追記 (2008-05-23T01:01:21+09:00)

id:tzmtk さんに twitter で教えて貰ったんですが、

で OpenID Authentication 2.0 対応な OP 一覧が見れるみたいです。

が、claimid.comは対応してないと思うんだけどリストに入ってるのが謎。

*1:もちろんサーバーサイドでやろうが XSS が確実に防げると言う訳じゃないですが

*2:もし拠り所があれば教えて下さい。

*3: 両方同時にリクエストした場合の挙動を調べていないので、何とも言えませんが。ライブラリ側で簡単に出来るようになっていればその限りじゃないです。