2008年05月13日

XREA / CORESERVER で OpenID を使うと Yahoo や livedoor が使えない問題

XREA に PHP で OpenID を使用した認証システムを導入したいと思った。
しかし、OpenID Enabled にある JanRain のライブラリを使うとYahoo ID でログインしようとした時に画面が真っ白になり処理が途中で停止してしまう問題に直面した。
今時 OpenID 対応サービスを始めるなら間違いなく Yahoo ID は外せない存在になると思うので応急処置を施してみた。

原因はどうも XML に関連した処理の途中(libxml)でエラーを起こしていることらしく、ググるだけで問題箇所を特定できたためそれを回避するコードを書いた。

問題となっているのは DOMXPath->query の呼び出しで、まず grep してこの関数を呼び出している場所を探した。
すると Auth/Yadis/XML.php 内の Auth_Yadis_dom->evalXPath でしか使われていないらしいので、Auth_Yadis_dom->evalXPath を呼び出しているコードを grep してどんな引数で呼び出されるのか調べ、それを元に今回の問題を回避できるような最低限のコードを書いた。

http://oovch.net/XML_php_modified.phps

XPath自体よく把握してないので結構勘で書いてます。
取り合えず v2.0.1 の XML.php をこれに差し替えれば動くようにはなったので、XREAやCORESERVERのlibxmlがバージョンアップされるなどでオフィシャルの対応がされるまでの間はこのコードで無理やり動かすことが出来そう。

ライブラリ側は xrd:XRD を要求してきて、Yahoo から渡された XML は名前空間なしのただの XRD だったりしていたので、取り合えず名前空間なしでも探すようなコードにしておいた。
アホみたいに長い OpenID 用の URL でも、ただ単に yahoo.co.jp でもちゃんと認証できるようです。
posted by oov at 16:17| Comment(5) | TrackBack(1) | プログラム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ググってこちらに辿り着きました。xreaでlivedoorも駄目だったけど、直してくれたファイルを使って動きました。ありがとう!!!
Posted by at 2008年07月02日 23:14
どういたしまして、お役に立てて光栄です。
Posted by oov at 2008年07月05日 14:02
こんにちは。XOOPSのOpenIDモジュールを開発しているのですが、XREA で動かずどうしたものかと悩んでいたところ、こちらのページに辿り着きました。

早速入れ替えてみたところ、見事成功しました。ありがとうございます。

こちらの XML.php のライセンスは、何になるのでしょうか、再配布したのですが問題ないでしょうか。
Posted by nao-pon at 2008年08月26日 15:36
こんにちは。
ライセンスについては考えていませんでしたが、
特に利用を制限する理由はありませんのでBSDライセンスということでお願いします。
Posted by oov at 2008年08月26日 17:25
早速の返信ありがとうございます。

前言の「再配布したのですが」は 「再配布したいのですが」の間違いでした。(「い」が抜けただけで恐ろしく意味が違う・・・) :-P

BSDライセンスということ、ありがとうございます。

チーム内で Go! が出次第、適用させて頂きます。 :-D
Posted by nao-pon at 2008年08月26日 17:37

この記事へのトラックバック

Coreserver用外部認証モジュール&OpenIDプラグイン
Excerpt: CORESERVERでOpenID認証が動かなかった件ですが、ファイルをひとつ差し替えて動くようになりました。
Weblog: ムジログ
Tracked: 2008-12-14 23:59