Skip to content

サイト内にBasic認証を設定する

サイト内にBasic認証を設定する方法について解説しています。

Basic認証とは

Basic認証はWeb上で利用できる認証方法のひとつです。
Basic認証が設定されているサイト(あるいはページ)にアクセスすると以下のようなダイアログが表示され、指定されたユーザー名(ID)とパスワードを入力しログインすることで、ページにアクセスできる仕組みです(画像はFirefoxでのBasic認証画面です)

FirefoxでのBasic認証画面

個人サイトではサイトの入り口や年齢制限のあるコンテンツなどでよく見かけるかと思います。Basic認証の設定には.htaccess.htpasswdというふたつのファイルを利用します。

Basic認証自体は非常に簡易な認証方法で、セキュリティレベルとしてはとても低いものです。そのため、あくまでも上記のような目的でBasic認証を利用することを推奨します。

Basic認証の設定方法

先述のとおり、Basic認証の設定には.htaccess.htpasswdというふたつのファイルを利用します。以下、それぞれのファイルの記述について解説しています。

.htaccessファイル

Basic認証を設置したいディレクトリに.htaccessファイルを作成します。すでに.htaccessファイルが存在する場合は、このファイルを編集します。

注意事項

サーバーの.htaccessファイルを編集する際は、.htaccessファイルがすでに存在している場合は必ずバックアップを取ってください。

また、レンタルサーバー(とくに無料のもの)によっては、.htaccessファイルが許可されていない場合があります。事前にレンタルサーバーのFAQなどで.htaccessファイルの使用可否をご確認ください。

Basic認証のコードは以下です。

apache
# 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
<?php
  echo $_SERVER['DOCUMENT_ROOT'];
?>

Require

Basic認証を設定した領域にアクセスできるユーザーを指定します。
valid-userとすることで.htpasswdファイルに記述のあるすべてのユーザーからのログインを許可できます。

補足

Basic認証の設定にはAuthBasicProviderという項目も必要ですが、この値はデフォルトでfileとなっており、今回のように.htpasswdファイルを利用する場合は指定不要です。

ファイルをいったんPC上で作成する場合は、htaccess.txt(ファイル名は任意のものでOK)というテキストファイルで作成し、サーバーにファイルをアップロード後にファイル名を.htaccessと変更してください。.(ドット)からはじまるファイルは、PC上では存在するものの基本的に見た目上は表示されません。

.htpasswdファイル

Basic認証のユーザー名(ID)とパスワードを記載するファイルです。

ファイルに記載する文字列は以下のように指定します。

txt
ユーザー名:暗号化されたパスワード

ユーザー名とパスワードの間を半角の:(コロン)で繋ぎ、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認証の概要を知るにはいまでもじゅうぶん有用かと思います。