PHPでHTTP認証
Basic HTTP 認証の設定について
PHP
if (empty($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic');
header('HTTP/1.0 401 Unauthorized');
// キャンセル
$view->display('cancel.tpl');
exit;
} else {
// ユーザ名とパスワードを設定
$user = 'xxxxxxxx';
$pw = 'xxxxxxxx';
// 入力時の処理
if ($_SERVER['PHP_AUTH_USER'] != $user || $_SERVER['PHP_AUTH_PW'] != $pw) {
header('WWW-Authenticate: Basic');
header('HTTP/1.0 401 Unauthorized');
// 認証エラー
$view->display('cancel.tpl');
exit;
}
}
$_SERVER['PHP_AUTH_USER'] が利用できない環境では、代わりに $_SERVER['HTTP_AUTHORIZATION']を使用。
PHP
if (empty($_SERVER['HTTP_AUTHORIZATION'])) {
header('WWW-Authenticate: Basic');
header('HTTP/1.0 401 Unauthorized');
// キャンセル
$view->display('cancel.tpl');
exit;
} else {
// ユーザ名とパスワードを設定
$user = 'xxxxxxxx';
$pw = 'xxxxxxxx';
list($auth_user, $auth_pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
// 入力時の処理
if ($auth_user != $user || $auth_pw != $pw) {
header('WWW-Authenticate: Basic');
header('HTTP/1.0 401 Unauthorized');
// 認証エラー
$view->display('cancel.tpl');
exit;
}
}
キャンセル/エラー時のテンプレートはBasic認証でのキャンセル時のHTMLを流用。
Smarty
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>401 Authorization Required</title>
</head>
<body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body>
</html>
サンプル
ユーザ名: 20iyMhAvcS5hA
パスワード: 200sHNu2ZYc3c
※一定時間毎に更新