PHP で OpenID の認証デモサイトを作ってみた

試しに、PHP で RP(Relying Party)サイトを作ってみたかったので、Janrain OpenID Libraries を取得し、その中の examples/consumer 以下のサンプルプログラムを使って構築してみた。

で、少々ハマったのでメモしとく。

まず、

Fatal error: Call-time pass-by-reference has been removed in /DocumentRoot/Auth/OpenID/Consumer.php on line 1184

というエラーが出る。
どうも、5.3系では「関数コール時に引数が参照で渡されたら警告を出す」という動きを強制的に ON(有効)にしとかないと駄目みたいね。「参照渡し」は許さないということのようだ。

php.iniの allow_call_time_pass_reference の部分を、

;allow_call_time_pass_reference = Off
allow_call_time_pass_reference = On

という具合に(Off→Onに)修正した。

次に、うちの PHP は OpenSSL エクステンションが有効になってなかった。
これ、OpenID のサンプルプログラムの中から OP へのアクセスに SSL を使用するため(例:https://mixi.jp)、有効になってないと駄目。

20130626_openssl.jpg

ということで、configure の引数に --with-openssl を指定して再 make を行った。(この際、バージョンも 5.3.6 から、5.3.26 に上げた)

で、ここまやってもまだ try_auth.php を実行すると Authentication error; not a valid OpenID. というエラーが・・・

これは結局、mixi.jp の証明書がサーバにインストールされていないことが原因。

ブラウザで https://mixi.jp にアクセスし、証明書情報を表示し「エクスポート」した内容をサーバ上の証明書ファイルに追加してやる。
例えば、Forefox で証明書情報をエクスポートすると mixi.jp.crt という名前のファイルで保存されるので、その内容を、

cat >> /etc/pki/tls/certs/ca-bundle.crt

として、ca-bundle.crt の後ろに追加してやる。

以上で、index.php 上で「https://mixi.jp」を Identity URL に入力して Verify ボタンを押せば https://mixi.jp/openid_server.pl に飛び、認証が済めば指定したサイト(finish_auth.php)に帰ってくるところまで確認した。

トラックバック(0)

このブログ記事を参照しているブログ一覧: PHP で OpenID の認証デモサイトを作ってみた

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/2565

コメントする

このブログ記事について

このページは、shinodaが2013年6月27日 07:29に書いたブログ記事です。

ひとつ前のブログ記事は「PHP のショートタグを有効にしろって・・・ええ!?」です。

次のブログ記事は「初めてのピッチング練習、フリーバッティング」です。

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


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら