Digest認証を使ったアクセス制限を行う

Apache ではユーザーに対して Digest 認証(ダイジェスト認証)を行い、認証が通ったユーザーだけにディレクトリやファイルに対するアクセスを許可することができます。 Digest 認証では Basic 認証とは異なりブラウザとサーバ間でユーザー名とパスワードの情報がやり取りされるときに MD5 でハッシュ化されて送信されます。ここでは Digest 認証を使ったアクセス制限を行う手順について解説します。

※ ただセキュリティ的に強くなるかというと現時点ではそうでもなく、公式ヘルプでは Basic 認証+ SSL を推奨されています。

(Last modified: )

Digest認証の方式を設定する

Apache で Digest 認証を行うには次のディレクティブを設定する必要があります。

AuthType            認証方式
AuthName            認証領域
AuthDigestDomain    保護するURI
AuthDigestProvider  認証プロバイダ
AuthUserFile        パスワードファイル

AuthType ディレクティブでは認証方式を選択します。設定可能な値は None, Basic, Digest, Form の 4 つで今回は Digest 認証を使用するので Digest を指定します。

AuthName ディレクティブでは認証領域を選択します。一度認証が通ったあと同じ認証領域の名前が設定されている Digest 認証が必要なページへアクセスしたときに認証が不要となります。パスワードファイルでユーザーを作成するときに使用した領域名と一致する必要があります。

AuthDigestDomain ディレクティブではアクセス制限の保護の対象となる URI を指定します。

AuthDigestProvider ディレクティブでは認証プロバイダを選択します。デフォルトは file となっており今回のようにパスワードファイルを使用する場合は設定は不要です。 dbm 形式のパスワードファイルを使用する場合は dbm を指定してください。他に dbd が指定できます。

AuthUserFile ディレクティブでは使用するパスワードファイルを指定します。絶対パスまたは ServerRoot からの相対パスで指定します。

AuthType 、 AuthName 、 AuthDigestDomain 、 AuthDigestProvider 、 AuthUserFile の 5 つのディレクティブが記述できる場所は Directory, .htaccess です。 .htaccess で設定する場合は AllowOverride AuthConfig が設定されている必要があります。

※ Digest 認証で使用するパスワードファイルを事前に作成しておいてください。作成方法については「Digest認証用のユーザーを作成する(htdigestコマンド)」を参照されてください。

パスワードファイルは c:/pg/Apache24/password/ ディレクトリの中に passwords という名前でファイルを作成しました。ユーザーを一人追加してあります。

実際にDigest認証を行う(1)

今回は次のような記述を行います。

AuthType Digest
AuthName "Staff Only"
AuthDigestDomain /private/
AuthDigestProvider file
AuthUserFile c:/pg/Apache24/password/passwords

Digest 認証を行う対象のディレクトリまたはファイルに対して上記の設定を記述します。今回はドキュメントルートの下の private ディレクトリに対して設定します。

実際にDigest認証を行う(1)

httpd.conf ファイルを開き次のような記述を行いました。

<Directory "c:/pg/Apache24/htdocs/private">
  AuthType Digest
  AuthName "Staff Only"
  AuthDigestDomain /private/
  AuthDigestProvider file
  AuthUserFile c:/pg/Apache24/password/passwords
</Directory>

実際にDigest認証を行う(3)

アクセスを許可するユーザーを指定する

Digest 認証を使ったユーザー認証は、パスワードファイルに記述されているユーザーであればどのユーザーでも認証が可能です。対象のディレクトリやファイルへのアクセスをどの認証を通ったユーザーに許可するのかを最後に追加します。

特定のユーザーにだけ許可する場合には、次の書式を使用します。

Require user ユーザーA [ユーザーB] ...

許可するユーザーを一人または複数記述していきます。例えば honda と tanaka にアクセスを許可する場合には次のように記述します。

<Directory "c:/pg/Apache24/htdocs/private">
  AuthType Digest
  AuthName "Staff Only"
  AuthDigestDomain /private/
  AuthDigestProvider file
  AuthUserFile c:/pg/Apache24/password/passwords
  Require user honda tanaka
</Directory>

認証を通ったすべてのユーザーに許可する場合には、次の書式を使用します。

Require valid-user

実際には次のように記述します。

<Directory "c:/pg/Apache24/htdocs/private">
  AuthType Digest
  AuthName "Staff Only"
  AuthDigestDomain /private/
  AuthDigestProvider file
  AuthUserFile c:/pg/Apache24/password/passwords
  Require valid-user
</Directory>

※ Require ディレクティブでユーザーを指定してアクセスを許可する書式について詳しくは「ユーザーまたはグループを指定して許可する(Require user/Require group/Require valid-user)」を参照されてください。

auth_digest_moduleモジュールを追加する

Digest 認証を行うには auth_digest_module モジュールが必要となります。 httpd.conf ファイルを開き、「LoadModule auth_digest_module modules/mod_auth_digest.so」を検索してください。

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
#LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule auth_form_module modules/mod_auth_form.so

auth_digest_moduleモジュールを追加する(1)

先頭に # が記述されていた場合はコメントとなっているので # を削除してください。 httpd.conf ファイルを保存して Apache を再起動すると auth_digest_module モジュールを読み込みます。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule auth_form_module modules/mod_auth_form.so

実際にDigest認証を行う

それでは実際に Digest 認証を設定して試してみます。今回は登録されているユーザーの中で honda にだけアクセスを許可します。 httpd.conf で設定を行う場合は次の設定をいずれかの場所に記述してください。

<Directory "c:/pg/Apache24/htdocs/private">
  AuthType Digest
  AuthName "Staff Only"
  AuthDigestDomain /private/
  AuthDigestProvider file
  AuthUserFile c:/pg/Apache24/password/passwords
  Require user honda
</Directory>

.htaccess ファイルを使用する場合は、 .htaccess ファイルに次の設定を記述したあと .htaccess ファイルをアクセス制限を行うディレクトリに設置してください。

AuthType Digest
AuthName "Staff Only"
AuthDigestDomain /private/
AuthDigestProvider file
AuthUserFile c:/pg/Apache24/password/passwords
Require user honda

Apache を再起動したあと、対象のディレクトリ内にある Web ページへブラウザからアクセスします。

http://localhost/private/

すると次のような認証ダイアログが表示されます。

実際にDigest認証を行う(1)

アクセスの許可が与えられている honda でログインします。ユーザー名とパスワードを入力し「ログイン」をクリックしてください。

実際にDigest認証を行う(2)

アクセス制限された Web ページを閲覧することができました。

実際にDigest認証を行う(3)

なおユーザーとしては登録されていてもアクセス許可が与えられていないユーザーでログインした場合、再び認証ダイアログの画面が表示されます。

-- --

Digest 認証を使ったアクセス制限を行う手順について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。