今日は、何から書いていいのか。。。
ものすごく悩みまくって、ようやくここまでたどり着きました。
結論からいうと、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> |
で、返ってきた結果(レスポンス)の一部は、こちらです。
これで、Yadisプロトコルも怖くないぞと。
ゲットしたXRDSについては、今度、書きたいと思います。
0 コメント:
コメントを投稿