【これだけ】PHPでベーシック認証を設定する方法【現役エンジニアが解説】

PROGRAM

今回は、PHPでベーシック認証を設定する方法について、Apacheで設定する方法とPHPで設定する方法に分け、簡単に解説していきます。

Apacheで設定する方法

ベーシック認証は、PHPではなく、Apacheの機能を使って簡単に設定することができます。

まずは下記の内容のような”.htaccess”ファイルを作り、ベーシック認証をさせたいディレクトリに設置します。

AuthUserfile /var/.htpasswd
AuthGroupfile /dev/null
AuthName "Please enter your username and password."
AuthType Basic
require valid-user

次に下記の内容のようにユーザごとにパスワードを記載した”.htpasswd”ファイルを作り、”.htaccess”ファイルのAuthUserfileで指定した場所に設置します。

username1:password1
username2:password2
username3:password3

PHPで設定する方法

Apacheではなく、Webアプリケーション側で臨機応変にベーシック認証を設定したい場合もあると思います。

その場合には、対象のPHPのプログラムの始めに、ベーシック認証のheaderを設定し、入力されたユーザとパスワードを検証する必要があります。

switch (true) {
    case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']):
    case $_SERVER['PHP_AUTH_USER'] !== "admin":
    case $_SERVER['PHP_AUTH_PW']   !== "password":
        header('WWW-Authenticate: Basic realm="Please enter your username and password."');
        header('Content-Type: text/plain; charset=utf-8');
        die('このページを見るにはログインが必要です。');
}

上記のコードでは、ユーザに”admin”、パスワードに”password”を要求するベーシック認証を設定するPHPのサンプルコードであり、Apacheの設定を使わずベーシック認証を設定しています。

認証の現状

最近ではベーシック認証自体を見かける機会がほとんどなくなりました。

主な理由は、フレームワークが充実しており、通常のログイン機能を簡単に実装できてしまうからであると思われます。

しかし、現在の開発においても、ログイン機能までは必要ないが、最低限の鍵はかけておきたいといった場合にベーシック認証が使われることがあります。