LoginSignup
1
1

More than 1 year has passed since last update.

同じ .htpasswd ファイルを使っているのに複数回Basic認証のダイアログが開いてしまう

Posted at

問題

Apache のサーバーでウェブサービスを動かしていて、領域 /private1//private2/ 以下を共通の .htpasswd ファイルを使った Basic 認証必須の設定としている。
想定している動作としては、ブラウザで /private1/ を開いて1度パスワードを入力したのであれば、/private2/ 以下にアクセスしたときに、再度パスワード入力を要求されたくない。
しかし、今回はそうではなく、/private1/ 以下へのアクセスの後に /private2/ 以下にアクセスしたとき、再度のパスワードの要求が行われてしまった。 もちろん、その逆も同様である。

原因

今回、Basic認証の設定は /private1/.htaccess/private2/.htaccess でそれぞれBasic認証の設定を個別に行っていた。 しかし、作成者がそれぞれ別だったため、AuthUserFile では同じ .htpasswd ファイルを使っていたが、異なる AuthName を使う設定となっていた。

AuthName ディレクティブでは、認証に使う Realm (訳注: 領域) を設定します。Realm は大きく分けて二つの機能を提供します。 一つ目は、クライアントがパスワードダイアログボックスの 一部としてユーザにこの情報をよく提示する、というものです。 二つ目には、クライアントが与えられた認証領域に対してどのパスワードを 送信すれば良いのかを決定するために使われる、という機能です。

例えば、"Restricted Files" 領域中で 一度認証されれば、同一サーバ上で "Restricted Files" Realm としてマークされたどんな領域でも、クライアントは 自動的に同じパスワードを使おうと試みます。 このおかげで、複数の制限領域に同じ realm を共有させて、 ユーザがパスワードを何度も要求される事態を 防ぐことができます
https://httpd.apache.org/docs/2.4/ja/howto/auth.html

とあるため、クライアントブラウザ側の入力を1度で済ませたい場合、同じ名前の AuthName を設定する必要がある。

なお、Chrome 以外のブラウザではダイアログにこれを表示してくれるが、Chrome では AuthName 部分が表示されないため少し注意のこと。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1