web-dev-qa-db-ja.com

「有効なユーザーが必要」がないにもかかわらず、mod_auth_kerbにジョブを実行するように指示する方法

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を構成することは可能ですか?

11

(Kerberosとmod_auth_tktをマージするための)シンプルなシングルサインオンツールを作成したときに、これを一度実行しました。それは少しのchicaneryを必要としました:

  • / webauth/loginは、require valid-userディレクティブによって保護されていました。誰かが有効なKerberos資格情報に接続している場合、REMOTE_USERからユーザー名を取得し、認証Cookieを与えて、途中で送信しました。

  • Apache構成では、ErrorDocumentリクエストを使用して、認証されていないユーザーを/ webauth/require_authenticationにリダイレクトしました。

    ErrorDocument 401/webauth/require_authentication

    これにより、次のアクションが実行されます。

    • 401の結果コードを返し(通常、ErrorDocumentsは結果コードを食べます)、
    • ログインフォームを提示します。
  • ログインフォームは、ユーザー名/パスワードフォームを提示し、それを検証してから、認証Cookieを提供するという期待どおりの動作をします。

12
larsks