OpenID認証2.0とYadisとでIdentifier保持

理解の為の実践。

間違えて理解しているかもしれないので、ご注意ください。

今回は、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維持の一例を実践しながら理解する事が出来たと思います。

「無事」とか言いつつ、見当違いで大恥かいてなければいいですがね。


今は、仕様書を読み直しつつ、プロトコル概観を軸にその流れを詳細を追いつつ、ノートに書きながら消化しようとしている所です。

プロフィール

このブログ記事について

このページは、koshigoeが2008年2月 8日 00:21に書いたブログ記事です。

ひとつ前のブログ記事は「Yadis仕様書に訳をつけながら読んでるところ(2)」です。

次のブログ記事は「オープンソース版Fastladder」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。