サイト内にBasic認証を設定する方法について解説しています。
Basic認証とは
Basic認証はWeb上で利用できる認証方法のひとつです。
Basic認証が設定されているサイト(あるいはページ)にアクセスすると以下のようなダイアログが表示され、指定されたユーザー名(ID)とパスワードを入力しログインすることで、ページにアクセスできる仕組みです(画像はFirefoxでのBasic認証画面です)
個人サイトではサイトの入り口や年齢制限のあるコンテンツなどでよく見かけるかと思います。Basic認証の設定には.htaccess
と.htpasswd
というふたつのファイルを利用します。
Basic認証自体は非常に簡易な認証方法で、セキュリティレベルとしてはとても低いものです。そのため、あくまでも上記のような目的でBasic認証を利用することを推奨します。
Basic認証の設定方法
先述のとおり、Basic認証の設定には.htaccess
と.htpasswd
というふたつのファイルを利用します。以下、それぞれのファイルの記述について解説しています。
.htaccessファイル
Basic認証を設置したいディレクトリに.htaccess
ファイルを作成します。すでに.htaccess
ファイルが存在する場合は、このファイルを編集します。
注意事項
サーバーの.htaccess
ファイルを編集する際は、.htaccess
ファイルがすでに存在している場合は必ずバックアップを取ってください。
また、レンタルサーバー(とくに無料のもの)によっては、.htaccess
ファイルが許可されていない場合があります。事前にレンタルサーバーのFAQなどで.htaccess
ファイルの使用可否をご確認ください。
Basic認証のコードは以下です。
# Basic Authentication
AuthType Basic
AuthName "login..."
AuthUserFile /www/basic/.htpasswd
require valid-user
#((シャープ)
はコメントアウトの記述です。.htaccess
ファイルでは、コメントアウトの記述に#
を利用します。
AuthType
認証方式を指定します。Basic認証の場合はBasic
を指定します。
AuthName
認証領域を指定します。ブラウザによっては、ここに指定した文字列がダイアログに表示されます。指定する文字は任意のものを指定できますが、半角英数字で指定するのが無難です。
これを指定しておくことで、一度認証が通ったあと(ログインに成功したあと)、同じ認証領域の名前が設定されているBasic認証が必要なページにアクセスした際、認証が不要になります。
AuthUserFile
ログインするためのユーザー名とパスワードが書かれた.htpasswd
ファイルパスを指定します。サーバーのルートパスから指定します。
ルートパスはサーバーによって違います。一例として、さくらのレンタルサーバー(スタンダード)の場合は、/home/[ユーザーID]/www
がルートパスになります。
ルートパスは通常は各サーバーのマニュアル等に記載されているかと思います。
PHPが利用可能な環境であれば、以下を記述したPHPファイルを作成し、サーバーにアップロードしてアクセスすることでPHPファイルを設置したディレクトリまでのパスを確認することも可能です(確認後は必ずファイルを削除してください)
<?php
echo $_SERVER['DOCUMENT_ROOT'];
?>
Require
Basic認証を設定した領域にアクセスできるユーザーを指定します。valid-user
とすることで.htpasswd
ファイルに記述のあるすべてのユーザーからのログインを許可できます。
補足
Basic認証の設定にはAuthBasicProvider
という項目も必要ですが、この値はデフォルトでfile
となっており、今回のように.htpasswd
ファイルを利用する場合は指定不要です。
ファイルをいったんPC上で作成する場合は、htaccess.txt
(ファイル名は任意のものでOK)というテキストファイルで作成し、サーバーにファイルをアップロード後にファイル名を.htaccess
と変更してください。.(ドット)
からはじまるファイルは、PC上では存在するものの基本的に見た目上は表示されません。
.htpasswdファイル
Basic認証のユーザー名(ID)とパスワードを記載するファイルです。
ファイルに記載する文字列は以下のように指定します。
ユーザー名:暗号化されたパスワード
ユーザー名とパスワードの間を半角の:(コロン)
で繋ぎ、1行で記述します。1行記述するごとに改行して、複数のユーザー名とパスワードを指定することが可能です。
ユーザー名は半角英数字で指定します。また、-(ハイフン)
も利用可能です。
パスワードはそのまま記載せず、必ず暗号化した文字列を記載します。
補足
Basic認証のパスワードをWeb上で暗号化するツールは検索するとたくさん出てきます。弊サイトでも公開しているので、よければご利用ください。
.htpasswd
ファイルは、必ずしもBasic認証を設定するディレクトリ内に設置する必要はありません。サーバー上のWebサイトが表示される領域内(サーバーによって/www
や/public_html
など)であれば、どこにアップロードしてもOKです。ただ、同じ場所にあるとわかりやすいと思います。
先述の.htaccess
ファイル内AuthUserFile
の項目でファイルパスを指定します。
また、.htaccess
ファイル同様ファイルをいったんPC上で作成する場合は、htpasswd.txt
(ファイル名は任意のものでOK)というテキストファイルで作成し、サーバーにファイルをアップロード後にファイル名を.htpasswd
と変更してください。
エラー事例:.htaccessファイルを設定後、該当ページにアクセスするとInternal Server Error(500エラー)になる
.htaccess
ファイルのBasic認証の記述が正しいか確認してください。とくにAuthUserFile
項目で.htpasswd
ファイルのパス指定に問題があることが多いです。
稀に改行の文字コードがおかしいということもあるようです。
本記事の解説は以上です。
補足
Basic認証の設定方法についてもうすこし詳しく知りたい場合、すこし専門的になりますが、以下のサイトもご参考ください。
ApacheはHTTPサーバー(Webサーバー)を動かすためのミドルウェアのことで、Basic認証もこのApache上で動作しています。上記サイトは日本語訳が古くなっている可能性があるとのことですが、Basic認証の概要を知るにはいまでもじゅうぶん有用かと思います。