Apacheのbasic認証とdigest認証

ALL
スポンサーリンク

ブラウザであるページにアクセスした場合に、ユーザ名とパスワードで認証を求められるページの設定方法です。
Apacheの設定で、basic認証とdigest認証の2通りの設定方法を説明します。

なお、以下は CentOS6 での設定です。
Ubuntuでは /etc/httpd/conf/httpd.conf の代わりに /etc/apache2/sites-available/ 下のファイルにて設定して下さい。

basic認証の場合

認証用ユーザを作成します。
パスワード入力を求められるので、設定するパスワードを入力します。
なお、はじめてパスワードファイルを作成する場合は、-c オプションを指定します。2回目以降は -c 無しで実行して下さい。

htpasswd [-c] パスワードファイル ユーザ名

例えば始めてパスワードファイルを作成する場合で、ユーザ test1 を作成す場合は次のように -c 付きで実行します。

htpasswd -c /etc/httpd/.htpasswd test1

既にパスワードファイルが存在している場合は、-cは付けずに実行します。

htpasswd /etc/httpd/.htpasswd test2

認証用ユーザを作成したら、Apacheの設定を行います。

サンプルとして、認証が必要なページの URL は
http://localhost/auth-basic/
のような、auth-basic 以下とします。

ディレクトリ auth-basic を作成します。

mkdir -p /var/www/html/auth-basic

/etc/httpd/conf/httpd.conf に設定を追加します。

<Directory "/var/www/html/auth-basic">
 AuthType Basic
 AuthName レルム名
 AuthUserFile パスワードファイル
 Require valid-user または Require user ユーザ1 ユーザ2 ...
</Directory>

AuthType
Basic認証の場合は、AuthType に Basic を指定します

AuthName
レルム名を指定します。レルム名はユーザが任意に決めます。
レルム名の詳細は後ほど説明します。
また、レルム名はブラウザでのユーザ名/パスワード入力ダイアログに表示されます。
ブラウザで認証が必要なページにアクセスした時に表示されるダイアログ(下記画像)の XXXXXXX に該当する表示です。

画像

AuthUserFile
認証用ユーザの作成時に指定したパスワードファイルを記述します。

Require
valid-user を指定すると、認証ユーザはパスワードファイルに設定されている全ユーザが対象になります。
user に続けてスペース区切りでユーザを列挙すると、(パスワードファイルに設定されている中から)指定されたユーザのみ認証の対象となります。

例えば、パスワードファイルに設定されている全ユーザを認証する場合は以下のようになります。

<Directory "/var/www/html/auth-basic">
 AuthType Basic
 AuthName "Protected Area"
 AuthUserFile /etc/httpd/.htpasswd
 Require valid-user
</Directory>

ユーザ test1 , test2 のみ認証する場合は以下のようになります。

Directory "/var/www/html/auth-basic"
 AuthType Basic
 AuthName "Protected Area"
 AuthUserFile /etc/httpd/.htpasswd
 Require user test1 test2
</Directory>

最後に Apache に設定ファイルを読み込ませます。

/etc/init.d/httpd reload

これでWEBサーバ上で http://localhost/auth-basic/ にアクセスすると、次のようなダイアログが出てID/パスワードを要求されるようになります。

画像

digest認証の場合

認証用ユーザを作成します。
パスワード入力を求められるので、設定するパスワードを入力します。
なお、はじめて作成する場合は、-c オプションを指定します。2回目以降は -c 無しで実行して下さい。

htdigest [-c] パスワードファイル レルム名 ユーザ名

レルム名はユーザが任意に決めます。
レルム名の詳細は後ほど説明します。
また、レルム名は、ブラウザで認証が必要なページにアクセスした時に表示されるダイアログ(下記画像)の XXXXXXX の箇所に表示されます。

画像

なお、レルム名に空白を含む場合は、”で括って指定して下さい。

例えば始めてパスワードファイルを作成する場合で、ユーザ test1 を作成す場合は次のように -c 付きで実行します。

htdigest -c /etc/httpd/.htdigest 'Protected Area' test1

既にパスワードファイルが存在している場合は、-cは付けずに実行します。

htdigest /etc/httpd/.htdigest 'Protected Area' test2

認証用ユーザを作成したら、Apacheの設定を行います。

サンプルとして、認証が必要なページの URL は
http://localhost/auth-digest/
のような、auth-digest 以下とします。

ディレクトリ auth-digest を作成します。

mkdir -p /var/www/html/auth-digest

/etc/httpd/conf/httpd.conf に設定を追加します。

<Directory "/var/www/html/auth-digest">
 AuthType Digest
 AuthName レルム名
 AuthUserFile パスワードファイル
 Require valid-user または Require user ユーザ1 ユーザ2 ...
</Directory>

AuthType
Digest認証の場合は、AuthType に Digest を指定します

AuthName
レルム名を指定します。レルム名はパスワードファイル作成時に指定したものと同じものを指定して下さい。
レルム名の詳細は後ほど説明します。
また、レルム名はブラウザでのユーザ名/パスワード入力ダイアログに表示されます。
ブラウザで認証が必要なページにアクセスした時に表示されるダイアログ(下記画像)の XXXXXXX に該当する表示です。

画像

AuthUserFile
認証用ユーザの作成時に指定したパスワードファイルを記述します。

Require
valid-user を指定すると、認証ユーザはパスワードファイルに設定されている全ユーザが対象になります。
user に続けてスペース区切りでユーザを列挙すると、(パスワードファイルに設定されている中から)指定されたユーザのみ認証の対象となります。

例えば、パスワードファイルに設定されている全ユーザを認証する場合は以下のようになります。

<Directory "/var/www/html/auth-digest">
 AuthType Digest
 AuthName "Protected Area"
 AuthUserFile /etc/httpd/.htdigest
 Require valid-user
</Directory>

ユーザ test1 , test2 のみ認証する場合は以下のようになります。

Directory "/var/www/html/auth-digest"
 AuthType Digest
 AuthName "Protected Area"
 AuthUserFile /etc/httpd/.htdigest
 Require user test1 test2
</Directory>

最後に Apache に設定ファイルを読み込ませます。

/etc/init.d/httpd reload

これでWEBサーバ上で http://localhost/auth-basic/ にアクセスすると、次のようなダイアログが出てID/パスワードを要求されるようになります。

画像

レルム名について

レルム名は認証領域を示す名前です。
あるレルム名が設定された認証領域で一旦ユーザ名/パスワードで認証された後は、同じレルム名の認証領域へのアクセスでは、再度ユーザ名/パスワードは聞かれなくなります。

例えば /etc/httpd/conf/httpd.conf で次のように設定したとします。

<Directory "/var/www/html/auth-digest1">
 AuthType Digest
 AuthName "APPLE"
 AuthUserFile /etc/httpd/.htdigest
 Require valid-user
</Directory>
<Directory "/var/www/html/auth-digest2">
 AuthType Digest
 AuthName "APPLE"
 AuthUserFile /etc/httpd/.htdigest
 Require valid-user
</Directory>
<Directory "/var/www/html/auth-digest3">
 AuthType Digest
 AuthName "ORANGE"
 AuthUserFile /etc/httpd/.htdigest
 Require valid-user
</Directory>

auth-digest1 と auth-digest2 はレルム名(AuthNameで指定)が “APPLE” で同じです。
従って、auth-digest1 で一度ユーザ名/パスワードで認証されると、auth-digest2 へのアクセスでは、再度ユーザ名/パスワードを聞かれること無くアクセス出来ます。

一方、auth-digest1 と auth-digest3 では、レルム名(AuthNameで指定)が “APPLE” と “ORANGE” で異なります。
この場合は、auth-digest1 で一度ユーザ名/パスワードで認証しても、auth-digest3 へのアクセスで再度ユーザ名/パスワードが聞かれます。

このように、認証領域は Directoryディレクティブで指定するディレクトリ単位では無く、レルム単位となります。

レルム名は、ブラウザで認証が必要なページにアクセスした時に表示されるダイアログ(下記画像)の XXXXXXX に表示されますが、単なる表示内容ではないことに注意して下さい。

画像

参考

Apache/ベーシック認証の設定 – ウェブ関連技術調査
ベーシック認証を設定する(AuthType) – アクセス制限 – Apache入門
@IT:Apacheでユーザー認証を行うには(Basic認証編)
@IT:Apacheでユーザー認証を行うには(Digest認証編)
PasswordBasicAuth – Httpd Wiki
htdigest – manage user files for digest authentication – Apache HTTP Server
mod_auth_digest – Apache HTTP Server
認証、承認、アクセス制御 – Apache HTTP サーバ

コメント