Apache/2.2.3(Linux/SUSE)でKerberosベースの認証を行っています。ユーザーがURLを開こうとすると、ブラウザはHTTP基本認証のようにドメインログインとパスワードについてユーザーに尋ねます。ユーザーがそのような要求を3回キャンセルすると、Apacheは401 Authorization Required
エラーページを返します。私の現在の仮想ホスト構成は
<Directory /home/user/www/current/public/>
Options -MultiViews +FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Kerberos
AuthName "Domain login"
KrbAuthRealms DOMAIN.COM
KrbMethodK5Passwd On
Krb5KeyTab /etc/httpd/httpd.keytab
require valid-user
</Directory>
ユーザー向けの説明を含むNiceカスタム401エラーページを設定したいと思います。そして、私はそのような行を仮想ホスト構成に追加しました:
ErrorDocument 401 /pages/401
ユーザーがApacheを承認できない場合は、ユーザーを私の素敵なページにリダイレクトします。ただし、Apacheは以前のようにユーザーのlogin\passwordを要求しません。この機能とニースエラーページを同時に欲しい!
正しく動作させることは可能ですか?
まず、使った時
ErrorDocument 401 /pages/401
/pages/401
は動的なバックエンド生成コンテンツでした。単純な静的401.html
を作成し、設定したとき
ErrorDocument 401 /401.html
システム全体が正常に動作を開始しました。したがって、解決策は次のとおりです。401エラーを表示するために動的ページを使用せず、静的htmlを使用します。
あなたが説明している振る舞いはクライアント側であり、Apache自体とは何の関係もありません。
実際に起こることは次のとおりです。
アクセスが許可されている場合、Apacheは200で応答し、アクセスが許可されていない場合は、手順2に戻って続行します。何回試行するかは、ユーザーエージェント(つまり、ブラウザ)次第です。お使いのブラウザは明らかに3回の試行で停止します。その後、結果がキャッシュされたままになり、エラーページが表示されます。
ブラウザはこれらのタイプの操作の結果をキャッシュすることが多いため、これは正常です。再試行する前にブラウザを終了しましたか?これにより、キャッシュされた結果がクリアされます。
Apacheが「生の」動作をしている様子を正確に確認したい場合は、以下を使用してください。
認証されていないリクエスト:
_curl -D - http://yourserver/page.html
_
認証済み*リクエスト:
_curl -u user:pass -D - http://yourserver/page.html
_
Apacheが認証済みリクエストと未認証リクエストにどのように応答するかについては、出力の最上部にヘッダーが表示されます。 unauthの場合は401、authの場合は200が常に表示されます。そうでない場合は、正しく構成されていないか、何か他のことが起こっています。
* curl
は_--negotiate
_を渡すことでKerberos認証を行うことができますが、私はそれを行ったことがなく、試すための有効なテスト環境がありません。詳細については、curl(1)
マニュアルをお読みください情報。