理解の為の実践。
間違えて理解しているかもしれないので、ご注意ください。
今回は、RPにFastladder、OPにYahoo! JAPANを利用しました。
Fastladder(RP)に対して、自前で用意したYadis IDをUser-Supplied Identifierとして与えます(フォームに入力してボタンをクリック)。そうすると、FastladderがYadisプロトコルを使って、Yadis Resource Descriptorを探し当ててくれ、XRDSドキュメントを解析してくれます。
FastladderはそのXRDSドキュメントに対してディスカバリを行い、いくつかの情報が拾われます。ここで、今回は「OPを変更してもIdentifierを維持したい」という目的を実現する事が目的なので、"Claimed Identifier要素"が使われる様にします。
話が前後しますが、以下にYadis IDとして使ったサンプルを示します。URLは"http://lab.koshigoe.jp/identifier/"です。
<?php header('X-XRDS-Location: http://lab.koshigoe.jp/identifier/yadis_claimed-identifier.php'); ?>
このYadis ID(=Yadis URL)は、HTTPヘッダのみを返します(単純なPHPスクリプトなので、厳密にはいくつかのヘッダも含みますが)。この"X-XRDS-Location"ヘッダが示すURLは、Yadis documentの位置を示すURLです。その内容は、以下となっています。
<?php header('Content-Type: application/xrds+xml');
echo '<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service>
<Type>http://specs.openid.net/auth/2.0/signon</Type>
<URI>https://open.login.yahooapis.jp/openid/op/auth</URI>
</Service>
</XRD>
</xrds:XRDS>
';
PHPスクリプトになっていますが、これは"Content-Type: application/xrds+xml"をつけるためです。他は、XRDSをべた書きにして出力しているだけです。
ここで、OpenIDの仕様をよく理解できておらずに失敗していました。それは、"OP Identifier要素"を使っていた、という事です。そのため、Fastladderが使おうとするIdentifierが、YahooのランダムなURL(OP-Local Identifier)になってしまい、どうしたものかと少々悩みました。
改めて、仕様書を読んでみれば、"OpenID Service要素"には2つの種類が存在している事が分かりました。今回の目的の為には、おそらく"Claimed Identifier要素"を使えばよいのだろうと考え実験したところ、無事FastladderがClaimed Identifier(<=User-Supplied Identifier<=Yadis ID)を使おうとしてくれました。
というわけで、無事、Yadisを使ったIdentifier維持の一例を実践しながら理解する事が出来たと思います。
「無事」とか言いつつ、見当違いで大恥かいてなければいいですがね。
今は、仕様書を読み直しつつ、プロトコル概観を軸にその流れを詳細を追いつつ、ノートに書きながら消化しようとしている所です。