Apacheで mod_auth_kerb を使用してSSO認証を実装しました。私の設定は次のようになります:
<Location /login/ >
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate on
KrbAuthoritative on
KrbVerifyKDC on
KrbAuthRealm D.ETHZ.CH
Krb5Keytab /etc/HTTP.keytab
KrbSaveCredentials on
RequestHeader set KERBEROS_USER %{REMOTE_USER}s
</Location>
私の問題は、require valid-user
がないと、mod_auth_kerbがユーザーの認証を試みず、KERBEROS_USER
が(null)
になることです。 require valid-user
を追加すると、ブラウザーがサポートしている場合はユーザーが自動的に認証されますが、ブラウザーがKerberosネゴシエートをサポートしていない場合は、醜いモーダルログインフォーム(HTTP基本認証)が表示されます。
私が達成したいのは、ユーザーが/login/
にアクセスすると、mod_auth_kerbがKerberosネゴシエートを介してユーザーを認証しようとすることです。それが失敗した場合、通常のHTMLログインフォームがユーザーに表示されます。
このような方法でApache/mod_auth_kerbを構成することは可能ですか?
(Kerberosとmod_auth_tktをマージするための)シンプルなシングルサインオンツールを作成したときに、これを一度実行しました。それは少しのchicaneryを必要としました:
/ webauth/loginは、require valid-user
ディレクティブによって保護されていました。誰かが有効なKerberos資格情報に接続している場合、REMOTE_USERからユーザー名を取得し、認証Cookieを与えて、途中で送信しました。
Apache構成では、ErrorDocument
リクエストを使用して、認証されていないユーザーを/ webauth/require_authenticationにリダイレクトしました。
ErrorDocument 401/webauth/require_authentication
これにより、次のアクションが実行されます。
ログインフォームは、ユーザー名/パスワードフォームを提示し、それを検証してから、認証Cookieを提供するという期待どおりの動作をします。