PHP OpenIDをIISで利用する


OpenID(http://www.openidenabled.com/php-openid/) を利用する場合、リダイレクト処理 が行なわれますが Header 処理の前に print や echo が実行されると この処理が実行されなくなるため注意が必要です。

以下のようなスクリプトはIIS7.0 では header処理 が実行されません。(IIS7.5 や Apache では実行されます)

<?php
 echo “redirect test” ;
 $redirect_url = “http://iis.museum-in-cloud.com” ;
 header(”Location: “.$redirect_url);
?>

以下、実際に IIS7.0 で PHP OpneID のサンプルプログラムを稼動させるまでの手順を示します。

1. http://www.openidenabled.com/php-openid/ よりライブラリをダウンロード

http://www.openidenabled.com/php-openid/

http://www.openidenabled.com/php-openid/

2. IISマネージャでアプリケーションを追加し、サンプルアプリケーションを実行してみます。

2.1  ダウンロードしたファイルを展開

ダウンロードしたファイルを展開

ファイルを展開

2.2 IISマネージャでアプリケーションを追加

IIS Manager

IIS Manager

3. ファイルの修正

3.1 対象ファイル /php-openid-2.1.3examples/consumer/common.php
先頭に以下を追加します。

  define('Auth_OpenID_RAND_SOURCE', NULL);

作業ファイルの位置を編集します。

   $store_path = "c:/tmp/_php_consumer_dir";

3.2 対象ファイル /php-openid-2.1.3/Auth/Yadis/ParanoidHTTPFetcher.php

http://curl.haxx.se/docs/caextract.html から cacert.pem ファイルをダウンロードし、保存した位置を ParanoidHTTPFetcher.php に記述します。

curl_init の次に  cacrt.pem ファイルの指定を追記 (2箇所あるので注意)

また、 Auth_OpenID::log  の処理により画面にメッセージが表示されることで redirect処理が影響を受けるため、コメントアウトします。

while ($redir && ($off > 0)) {
  $this->reset();
  $c = curl_init();

  curl_setopt($c, CURLOPT_CAINFO, ‘C:/xxxxx/php-openid-2.1.3/<span style="color: #ff0000;">cacert.pem</span>’);
//                Auth_OpenID::log(
//                    ”Successfully fetched ‘%s’: GET response code %s”,
//                    $url, $code);
//            Auth_OpenID::log(”Got no response code when fetching %s”, $url);

3.3  対象ファイル php.ini

error_reporting の設定を変更して notice の表示を停止します。
(この表示も redirect 処理に影響するため)
  error_reporting  =  E_ALL & ~E_NOTICE
また extension=php_curl.dll と extension=php_openssl.dll を有効にする必要があります。( Web Platform Installer で IIS + PHP をインストールした場合、これらの設定は有効になっています。 php.ini 修正後のIISの再起動はコマンドラインから iisreset  により行なうことがきます。)

4. mixi.jp への redirect を確認

http://localhost/php-openid-2.1.3/examples/consumer/index.php

サンプル開始画面

にて mixi.jp を指定して実行し mixi のサイトへリダイレクトを確認します。

mixi open id

mixi open id

mixi よりリダイレクトにより元のページに戻ります。

認証成功

認証成功

証明書ファイルの設定が正しくない場合、以下のようなエラーとなります。

php-openid-examples

php-openid-examples

5.  サンプルスクリプトなど参考となるサイト

以上


タグ: ,


コメントをどうぞ