シンプルなWeb認証の仕組みを作る
目次
概要
PHP のインストール
シンプルな認証用Webサーバのスクリプトを作る
Web認証サーバを起動する
Web認証サーバの動作テストを行なう
Web認証サーバを停止する
Web認証の「結果だけ」を返す、非常にシンプルなWebサーバを作成する
MUN サーバ本体の説明とは異なりますが、ここではWeb認証システムについて簡単に作成していきます。
本来ならば、Web認証のシステムは複雑です。
Web認証について簡単に説明するならば、ユーザーに固有名・メールアドレス・パスワードなどを登録させ、
個別認識するためのユニークIDを割り当ててデータベース上に登録します。
ユーザーは接続のたびにパスワード認証などで正規ユーザーであるかどうかを確認します。
昨今では2段階認証、2要素認証、パスワードレス認証など様々なアルゴリズムを採用していますし、
もちろんブルートフォースアタック(総当たり攻撃)などのサイバー攻撃に対し堅固なセキュリティシステムも必要です。
そのメカニズムについて説明するには膨大な情報量が必要で、リスクも伴うため、ここでは触れません。
「Web 認証の結果を受け取り、ユーザーの認証要求に答えるかの簡単なサンプル」を作り、
どういった形でサーバ側でのカスタム認証を実装すればいいのかについて説明していきます。
PHP のインストール▲
認証用Webサーバの動作環境を整える
まずは認証用 Web サーバを設置させるために、PHP コードを動作させるための環境を整えます。
外部ページへのリンクとなりますが、以下のリンク先を参考に、PHP のインストールを済ませ、php コマンドを実行できる環境を作成してください。
・ Windows 環境の場合 : http://www.phpbook.jp/install/
・ Linux 環境の場合 : http://qiita.com/sango/items/a08c5b04df7125aaaad3
・ MacOS 環境の場合 : http://weblabo.oscasierra.net/php-56-mac-homebrew-install/
シンプルな認証用Webサーバのスクリプトを作る▲
認証用Webサーバのスクリプトを作成する
続けて、以下の PHP コードを用意し、適当なディレクトリに「index.php」という名前で保存してください。
<?php
##################################################################################
#
# 非常に簡素な認証用Webサーバのスクリプト
# ※ 簡素ゆえに、実用には全く不向きですので注意が必要です。
#
# 【認証方法】
# GET パラメータで username および password が渡されており、
# username が monobit, password が engine の場合のみ 認証結果として OK を返します。
# 上記条件に1つでも満たさない項目があれば、認証結果として FAILED を返します。
#
##################################################################################
switch(true) {
case (!isset($_GET['username'], $_GET['password'])):
case ($_GET['username'] != 'monobit'):
case ($_GET['password'] != 'engine'):
echo '{"result":"FAILED"}';
break;
default:
echo '{"result":"OK"}';
break;
}
?>
GET パラメータで username と password のパラメータを受け取り、
もし仮に username=monobit, password=engine が指定してある場合は、
{"result":"OK"}
と表示し、それ以外であれば
{"result":"FAILED"}
と表示する、非常に簡単なアルゴリズムのスクリプトです。
これで monobit ユーザーに対するパスワード認証処理を行なう Web 認証サーバである、という体裁にします。
Web認証サーバを起動する▲
php コマンドで認証用Webサーバを起動させる
上記で示した単一の PHP スクリプトをWebサーバとして動かすために、
以下のコマンドをターミナル(Windowsであればコマンドプロンプト, PowerShell)から起動してください。
php -S 0.0.0.0:80 -t <index.phpを保存したディレクトリの場所>
-t オプションに続く <index.phpを保存したディレクトリの場所> については、実際に上記で示した index.php
を保存した場所を指定してください。
例えば Linux 環境下で、/home/guest/php_test/index.php として保存した場合、以下のように指定します。
php -S 0.0.0.0:80 -t /home/guest/php_test/
Web認証サーバの動作テストを行なう▲
Webブラウザから認証用Webサーバにアクセスしてみる
起動した認証用Webサーバに対し、お手持ちのWebブラウザを使ってアクセスしてみましょう。
Webブラウザ(Edge, IE, Safari, Firefox, GoogleChrome など)を起動し、アドレスに以下の内容を入力してアクセスします。
http://<認証用Webサーバのアドレス>/index.php
<認証用Webサーバのアドレス> については、上記の php コマンドを実行したWebサーバのアドレスを入力します。
例えば、IPアドレスが 192.168.1.253 に割り当てられている Linux 上で動作している認証用Webサーバにアクセスする場合、以下のように指定します。
http://192.168.1.253/index.php
アクセスした結果、以下のようにブラウザに「{"result":"FAILED"}」と表示されていれば、
ひとまず「認証用Webサーバ」として設置させることには成功しています。
GETパラメータで、Webブラウザから認証を通してみる
続けて、URI情報として、
・ ユーザ名(username)
・ パスワード(password)
をGETパラメータとして与え、起動した認証用Webサーバにアクセスしてみましょう。
Webブラウザに対し、先ほどのアドレスにGETパラメータを付加し、以下のようにアドレスに入力してアクセスします。
http://<認証用Webサーバのアドレス>/index.php?username=monobit&password=engine
<認証用Webサーバのアドレス> については、上記の php コマンドを実行したWebサーバのアドレスを入力します。
例えば、IPアドレスが 192.168.1.253 に割り当てられている Linux 上で動作している認証用Webサーバにアクセスする場合、以下のように指定します。
http://192.168.1.253/index.php?username=monobit&password=engine
アクセスした結果、以下のようにブラウザに「{"result":"OK"}」と表示されていれば、
ひとまず「指定したユーザー名とパスワードで認証用Webサーバが『認証成功』を返している」ことが分かります。
Web認証サーバを停止する▲
認証用Webサーバの動作を停止する
確認を終えたところで、php コマンドで実行している認証用Webサーバの動作を一度停止します。
コマンドを実行しているコンソール上で CTRL + Z キーを同時押しして、サーバの動作を強制停止させてください。