Create: 2014/02/10
LastUpdate: 2014/02/22
≪ メニューに戻るLastUpdate: 2014/02/22
ここでは、OpenAMのテスト環境を構築したときの手順の一部を紹介します。
テスト環境の概要は、メニューを参照してください。
SSOを試すには、認証で保護するWEBサイトが必要になります。そこで、まず最初に、「テスト用WEBサイト」を構築します。
今回、テスト用に用意するのは、以下の3つのページです。
- ログインページからフォーム認証でログインするページ
- Basic認証でログインするページ
- 認証なしで誰でも参照できるページ
システム構成のイメージは以下のとおり。
「ユーザ端末」はWindows8+IE11、「テスト用のWEBサイト」はCentOS6+Apache2+PHP5とします。
ユーザ端末:192.168.1.91
WEBサーバ:192.168.1.94
環境構築と動作確認の手順は、以下のとおり。1.WEBサーバの構築
CentOS6 + Apache + PHP5の組み合わせでWEBサーバを構築します。
1.1.CentOS6のインストール
CentOS6のインストール手順は、「 [XenServer 6.1.0] CentOS6.4(32bit)のネットワーク・インストール」を参照してください。
今回は、以下のような設定にします。
- OS:CentOS6.4 (32bit)
- SELinux:無効
- ファイヤーウォール:無効
- タイムゾーン:Asia/Tokyo
- 言語:ja_JP.UTF-8
- パッケージ:最小構成
- ホスト名: exweb01
- IPアドレス: 192.168.1.94
1.2.Apache + PHP5のインストール
yum でApacheとPHPをインストールします。
# yum install httpd phpPHPアプリケーション実行時に警告メッセージが出力されるので、PHPのタイムゾーン設定だけ変更します。
/etc/php.ini 以下のように修正します。(赤字部分)
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Asia/Tokyo"
BASIC認証が使用できるようにApacheの設定を変更します。また、Apache起動時に警告メッセージが出力されるのでServerName も設定します。/etc/httpd/conf/httpd.conf を以下のように修正します。(赤字部分)
#ServerName www.example.com:80 ServerName 127.0.0.1:80 ~省略~ # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # #AllowOverride None AllowOverride All以下のようにして、Apacheのサービスを自動起動/停止するように設定して起動します。
# chkconfig httpd on # service httpd start
1.3.WEBページの作成
/var/www/html に以下の構成でWEBページを作成します。
/var/www/html : ドキュメントルート ├── demo1 : BASIC認証ページ │ ├── .htaccess │ └── index.html ├── demo2 : フォーム認証ページ │ ├── index.html │ ├── logon.php │ ├── logout.php │ └── main.php └── index.html : 認証なしページ(TOPページ)
(1) 認証なしページ(TOPページ)
「BASIC認証ページ」と「フォーム認証ページ」へのリンクを持つだけのページを作成します。このページは誰でも表示できるページとして作成します。/var/www/html/index.html の内容は以下のとおり。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>DEMO TOP</title> </head> <body> <h1>DEMO TOP</h1> <ul> <li><a href="demo1/">BASIC認証ページ</a> <li><a href="demo2/">フォーム認証ページ</a> </ul> </body> </html>
(2) BASIC認証ページ
BASIC認証用のユーザ/パスワードを入力しないと見れないページを作成します。まず、表示するページを作成します。
/var/www/html/demo1/index.html の内容は以下のとおり。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>DEMO1 PAGE</title> </head> <body> <h1>DEMO1 PAGE</h1> <p>BASIC認証で保護されたページです。</p> </body> </html>次に、/var/www/html/demo1内のページは、BASIC認証を有効にします。
/var/www/html/demo1/.htaccess に設定を記述します。内容は以下のとおり。
AuthType Basic AuthName "Input your ID and Password." AuthUserFile /etc/httpd/conf/htpasswd require valid-user最後に、htpasswd コマンドで BASIC認証用のアカウントを作成します。
アカウントは、/etc/httpd/conf/htpasswd に保存します。
# htpasswd -c /etc/httpd/conf/htpasswd user01 New password: パスワード Re-type new password: パスワード Adding password for user user01
(3) フォーム認証ページ
ログイン画面でユーザ/パスワードを入力しないと見れないページを作成します。/var/www/html/demo2/logon.phpでログイン画面を表示して認証処理を実施します。
内容は以下のとおり。
ユーザ/パスワードはソースにハードコーディングして、1アカウント(user01/password)だけOKにするようにしています。
<?php $TEST_USER = "user01"; $TEST_PASS = "password"; session_start(); // エラーメッセージ $errorMessage = ""; // 画面に表示するため特殊文字をエスケープする $viewUserId = htmlspecialchars($_POST["userid"], ENT_QUOTES); // ログインボタンが押された場合 if (isset($_POST["login"])) { // 認証成功 if ($_POST["id"] == $TEST_USER && $_POST["pwd"] == $TEST_PASS) { // セッションIDを新規に発行する session_regenerate_id(TRUE); $_SESSION["USERID"] = $_POST["id"]; header("Location: main.php"); exit; } else { $errorMessage = "ユーザIDあるいはパスワードに誤りがあります。"; } } else { $errorMessage = "ログインボタンをクリックしてください。"; } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>DEMO2 PAGE - logon</title> </head> <body> <h1>DEMO2 PAGE - logon </h1> <form id="loginForm" name="loginForm" action="<?php print($_SERVER['PHP_SELF']) ?>" method="POST"> <fieldset style="width:400px"> <legend>フォーム認証</legend> <div style="color:red"><?php echo $errorMessage ?></div> <label for="userid">ユーザID</label><input type="text" id="id" name="id" value="<?php echo $viewUserId ?>"> <br> <label for="password">パスワード</label><input type="password" id="pwd" name="pwd" value=""> <br> <label></label><input type="submit" id="login" name="login" value="ログイン"> </fieldset> </form> </body> </html>/var/www/html/demo2/main.phpでログイン成功後の画面を表示します。
セッションがタイムアウトしたり、ログインしていないユーザが表示しようとした場合などは、ログアウトページに飛ばします。
内容は以下のとおり。
<?php session_start(); // ログイン状態のチェック if (!isset($_SESSION["USERID"])) { header("Location: logout.php"); exit; } $msg = "ようこそ" . $_SESSION["USERID"] . "さん"; ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>DEMO2 PAGE - main</title> </head> <body> <h1>DEMO2 PAGE - main</h1> <p><?php echo $msg ?></p> <ul> <li><a href="logout.php">ログアウト</a></li> </ul> </body> </html>/var/www/html/demo2/logout.phpでログアウト後の画面を表示します。
内容は以下のとおり。
<?php session_start(); if (isset($_SESSION["USERID"])) { $errorMessage = "ログアウトしました。"; } else { $errorMessage = "セッションがタイムアウトしました。"; } // セッション変数のクリア $_SESSION = array(); // クッキーの破棄 if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } // セッションクリア @session_destroy(); ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>DEMO2 PAGE - logout</title> </head> <body> <h1>DEMO2 PAGE - logout</h1> <div style="color:red"><?php echo $errorMessage; ?></div> <ul> <li><a href="logon.php">ログイン画面に戻る</a></li> </ul> </body> </html>
2.ユーザ端末の構築
ユーザー端末には、Windows8 を使用します。インストール手順については、「 [XenServer 6.1.0] Windows8(32bit)(評価版)のインストール」を参照してください。
OSの設定は以下のようにします。
- OS:Windows8 (32bit)
- ホスト名: exdt01
- IPアドレス: 192.168.1.91
「コントロールパネル」→「システムとセキュリティ」→「リモートアクセスの許可」 で下図の画面を表示したら、赤枠で示した箇所をチェックして[OK]ボタンをクリックします。
OpenAMでSSOする場合、ブラウザは、クッキーとJavascriptが扱えるなら何でもよさそうなのですが、今回はIEを使用します。
なお、OpenAMではCookie に認証情報を保存するのでFQDNでWEBサイトにアクセスできたほうがいいようです。
今回は、DNSサーバを用意していないので hosts にWEBサーバのIPアドレスとFQDNを登録します。
http://www.example.com でアクセスできるように、上記1のWEBサーバのIPアドレスを登録します。
管理者モードでエディタ(メモ帳など)を起動して、C:\windows\system32\drivers\etc\hosts に以下の内容を追記します。
192.168.1.94 www.example.comここでは、SSO用の特別な設定は行いませんが、WindowsDesktopSSO認証を試したいと思っているのでユーザ端末を用意しました。
WindowsDesktopSSO認証でSSOを行うと、Windows端末にログインするだけで、上記のWEBサイトをログイン不要で使用できるようになります。
3.動作確認
ユーザ端末から上記1の「テスト用WEBサイト」にアクセスして動作を確認します。
ユーザ端末にログインして、以下のURLにアクセスします。
-
http://www.example.com
[BASIC認証ページ]をクリックします。
下図のページが表示されたらOKです。
BASIC認証用のユーザとパスワードを入力して、[OK]ボタンをクリックします。
下図のページが表示されたらOKです。
ブラウザの[戻る]ボタンをクリックします。
下図のトップページが表示されたら、[フォーム認証ページ]をクリックします。
下図のページが表示されたら、OKです。
ユーザに "user01"、パスワードに “password" を入力して、[ログイン]ボタンをクリックします。
下図のページが表示されたらOKです。
[ログアウト]ボタンをクリックします。
下図のページが表示されたらOKです。