PHP OpenID 認証 実行サンプル


以下に あなたの OpenID を入力して下さい

OpenID URL:



Google の場合は、https://www.google.com/accounts/o8/id
Yahoo の OpenID 取得(確認)に関しては、http://help.yahoo.co.jp/help/jp/edit/openid/openid-03.html
yahoo.co.jp ( https://me.yahoo.co.jp でも me.yahoo.co.jp でも ) で認証できます

この処理で使用しているライブラリは こちらの PHP OpenID library. を使用しています

https://mixi.jp でテストしています。
OpenID は、http://mixi.jp/openid_edit.pl で取得できます
( https://mixi.jp ) で認証できます

IE ではうまく行くのに、Firefox や Opera で、 OpenID authentication failed: Missing required field 'sig' と戻って来ます ( ログインや確認は正常に行って、戻って来た時のエラー ) オリジナルの http://openidenabled.com/php-openid/trunk/examples/consumer/ でも出るので・・・ mixi の問題のような気がしますが。 で、エラー部分をコメントにすると、別のメッセージが出て、1.0がなんとか。 どこかで読んだ・・・という事で、ニックネームを返さないようにしたら通りました。 mixi がなんかブラウザ対応してバグらしたんでしょう。 そして。 どうしても気になるので、テストしたら、 ニックネームにスペースが入ってる場合のみ、IE 以外でエラーになりました。 何なんでしょう? ●原因確定 IE の場合のニックネーム night+w%26aacute%3Blker IE 以外のニックネーム night+w%26aacute%3Blker この違いのせいで、PHP に $_GET レベル( $_SERVRE['QUERY_STRING'] ) で、 データが欠落します。+ の & のせいで、以降のデータがなくなってしまいます。 補完するには、生の入力データを取得して再構築する必要があると思います。 ですから、mixi 側で修正してもらわないと解決になりませんね。 ●mixi では無く、Mozillaに問題ありそうなんですが・・・ Firefox の Firebug で URL を見てみると、+ のままだったので、 ブラウザが + を + に変換してしまっている可能性が出てきました。 となると、本当に IE 以外は全部危ないですね。 ( Google Chrome もアウト )
http://developer.mixi.co.jp/openid/faq で、利用時の最も解りにくい問題である、証明書の検証エラーについて 記述されていますが、( RPからhttps://mixi.jp/へのSSL接続に失敗します。どんな対策が必要ですか? ) “crul - Details on Server SSL Certificates” のページの最後にある、 http://curl.haxx.se/docs/caextract.html から、cacert.pem をダウンロード して使用する事で解決できます。 このファイルの使用方法は、Auth/Yadis/ParanoidHTTPFetcher.php を以下のように変更します 2箇所ある、curl_exec($c); の直前に以下を記述 if ($this->isHTTPS($url)) { curl_setopt($c, CURLOPT_CAINFO, "/xxxx/xxxxxxxx/www/php/cacert.pem"); } ここで、/xxxx/xxxxxxxx/www/php/ は、このサイトの ftp 上のディレクトリです ※ common.php の $store_path は "/xxxx/xxxxxxxx/www/php/_php_consumer_test"; ※ windows では、define('Auth_OpenID_RAND_SOURCE', NULL); を common.php 先頭で定義 ※ windows では、extension=php_curl.dll と extension=php_openssl.dll を有効に 汎用的にするには、以下のようにして、処理側で $openid_pem を使用します
if ($this->isHTTPS($url)) { curl_setopt($c, CURLOPT_CAINFO, $GLOBALS['openid_pem']); }
curl を無効にする事で、証明書は必要なくなりますが、mixi では以下のような記述があります
HTTPクライアントをサーバ証明書の検証を行わないよう設定して問題を回避することは可能ですが、 これはセキュリティ上非常に問題のある対応です。 OPとRP自身とそれぞれのユーザーを危険にさらさないためにも、 RPではサーバ証明書の検証を実施するようにお願いします。 次のような記述は、DNS詐称によるセキュリティリスクを高める悪い方法です。 # 悪いコードの例。このオプションが無指定の場合は証明書の検証が行われます curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);
だったら、証明書の取得方法もっと親切に記述しろ・・・