2008/08/02

[ColdFusion][OpenId]YadisプロトコルでXRDSを取得

今日は、何から書いていいのか。。。

ものすごく悩みまくって、ようやくここまでたどり着きました。

結論からいうと、ColdFusionを使って、Yahooが発行しているXRDSの位置を突き止める方法がわかったのです。

あまりにも悩みすぎて、どういう順序でここまできたのか、すべて思いだせないのですが、思いだせる範囲で書いていきます。

昨日の話とかぶりますが、yahooでゲットできるOpenIdを使って認証するログイン画面を、今、作ろうとしています。

で、ログイン方法は、OpenId 2.0に準拠した方法でログインできるところまで、書きました。

そこで、具体的にどうやってログイン方法を実装するか、色々と調べました。

ひたすらぐぐったのですが、全然、ColdFusionを使った実装方法が見つりませんでした。

唯一見つかったのはCFOpenIDにあるプログラムで、ダウンロードして使えばいけるのかなと思ったのですが、ダメでした。

というのも、このプログラムを使った認証方法は、OpenId 1.1に準拠した方法なので、ダメだったのです。

そこで、ColdFusionでぐぐってもラチがあかないなと思い、そもそも、「OpenIdとはなんぞや??」というところからスタートしたほうがいいかなと思い、@マークItのOpenIDの仕様と技術とgihyo.jpのいますぐ使えるOpenIdを読みました。

読んだのはいいのですが、肝心の実装方法が、それぞれ、PerlとRubyで書かれていたため、基本的な用語しか理解できず、最終的に、OpenId.netのOpenID Authentication 2.0 - Finalも合わせて読んでいきました。

と読んでいくうちに、どうやら、Yadisプロトコルを使ってEndpoint URLをゲットすればいいことがわかりました。

yahooのデベロッパーサイトにも、そのことについて書かれています。

ってことは、Yadisを使ってEndpoint URLをゲットすれば、とりあえず少しは前進できるのかなと思いました。

この段階で、Yadisプロトコルは、http通信を使えばおそらくできるのではないのかなーという推測がありました。

案の定、Yadisの仕様書(html版)を見てみると、Yadis IDにhttpリクエストをgetで送ると、XRDSをゲットできることがわかりました。

でも、Yadis IDってなんぞや??
そう思いながら、仕様書を読んでいくと、どうやらhttpかhttpsで始まるurlであることがわかりました。

urlであることはわかったのですが、果たして、どこのurlなのでしょうか?

この段階で、yahooのデベロッパーページを見てみると、特定のurlの記載がなかったので、おそらく「http://www.yahoo.co.jp」だろうなーと推測して、色々と調べてみたら、案の定、ビンゴでした。

id:lopnorさん(超感謝です)の OpenID2 つうか Yadis はじめましたの記事で、yahoo.comにhttpリクエストを送った結果が表に書かれていて、その中に、なんと、なんと、「X-XRDS-Location: http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds
」という文字があったのです。

これで推測が正しいことが判明し、後は、cfhttpタグでyahoo.co.jpにhttpリクエストのgetメソッドで送ればいいんだなーということがわかりました。

というわけで、ここまでを総合して、以下、ソースです。

<cfprocessingdirective pageencoding="utf-8">
<cfhttp url="http://www.yahoo.co.jp"
method="get"
redirect="no"
/>
<cfoutput>
<cfset keyToArray = StructKeyArray(cfhttp.responseHeader)>
<table>
 <tr><td>responseHeader</td><td>value</td></tr>
 <cfloop index="i" from="1" to="#ArrayLen(keyToArray)#">
  <tr><td>#keyToArray[i]#</td><td>#cfhttp.responseHeader[Evaluate("keyToArray[i]")]#</td></tr>
 </cfloop>
</table>
</cfoutput>

で、返ってきた結果(レスポンス)の一部は、こちらです。
Photobucket
これで、Yadisプロトコルも怖くないぞと。

ゲットしたXRDSについては、今度、書きたいと思います。

0 コメント:

コメントを投稿