PHPでBasic認証を設定する方法

PHPでBasic認証を設定する方法

サイト制作でフロントチームからサーバーサイド(PHP)でBasic認証をかけてほしいと要望があり、意外なところで沼ったのでメモ。

Basic認証を設定したいページの先頭で下記をコピペすればOKです。


<?php
// Basic認証 設定値
$BASIC_AUTH_USER = 'user';
$BASIC_AUTH_PASSWORD = 'pass';

// リクエストから取得したユーザー名とパスワードを検証
if (
    !isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
    $_SERVER['PHP_AUTH_USER'] !== $BASIC_AUTH_USER || $_SERVER['PHP_AUTH_PW'] !== $BASIC_AUTH_PASSWORD
) {
    // 認証が失敗した場合、ベーシック認証を要求
    header('WWW-Authenticate: Basic realm="Restricted Area"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Authentication required';
    exit;
}
?>

以上。

認証画面が繰り返し表示される場合

Basic認証は設定できたが、正しい値を入力しても認証画面が繰り返し表示される時.htaccessに以下を追記すると改善する可能性があります。(レンタルサーバーでありがち)

RewriteEngine  On
RewriteCond     %{HTTP:Authorization} ^(.*)
RewriteRule     ^(.*) - [E=HTTP_AUTHORIZATION:%1]
うぇぶとまと

この記事を書いたキッカケがこれ。「認証画面が繰り返し表示される」です。今まで普通に使えてたもんで.htaccessのことを完全に失念してて地味に沼った。

コメント (0)

コメントする人

セキュリティのためreCAPTCHAを利用しています。
Googleのプライバシーポリシー利用規約が適用されます。
うぇぶとまと|Webエンジニア
うぇぶとまと|Webエンジニア

飲食→派遣→IT系ベンチャーに転職。
本業をベーシックインカムとし、やりたい事に挑戦するWebエンジニア。