Wie man mod_auth_kerb anweist, seine Arbeit zu erledigen, obwohl kein "gültiger Benutzer erforderlich" ist

11

Ich habe eine SSO-Authentifizierung mit mod_auth_kerb auf Apache implementiert . Meine Konfiguration sieht folgendermaßen aus:

<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>

Mein Problem ist, dass require valid-usermod_auth_kerb ohne nicht einmal versucht, den Benutzer zu authentifizieren, und KERBEROS_USERam Ende ist (null). Wenn ich hinzufüge require valid-user, wird der Benutzer automatisch authentifiziert, wenn der Browser dies unterstützt, aber es wird ein hässliches modales Anmeldeformular (ala HTTP Basic Auth) angezeigt, wenn der Browser Kerberos Negotiate nicht unterstützt.

Was ich erreichen möchte, ist, dass /login/mod_auth_kerb bei einem Besuch eines Benutzers versucht, den Benutzer über Kerberos Negotiate zu authentifizieren. Wenn dies fehlschlägt, wird dem Benutzer ein normales HTML-Anmeldeformular angezeigt.

Ist es möglich, Apache / mod_auth_kerb so zu konfigurieren?

Benjamin Wohlwend
quelle
Wenn Sie kein Anmeldeformular und keine angemessene Fehlerbehandlung angeben, ist dies das richtige (erwartete) Verhalten.
BillThor

Antworten:

12

Ich habe dies einmal getan, als ich ein einfaches Single-Signon-Tool erstellt habe (um Kerberos mit mod_auth_tkt zusammenzuführen). Es erforderte ein wenig Schikanen:

  • / webauth / login wurde durch eine require valid-userDirektive geschützt . Wenn jemand mit gültigen Kerberos-Anmeldeinformationen verbunden ist, haben wir seinen Benutzernamen von REMOTE_USER erhalten, ihm ein Authentifizierungscookie gegeben und ihn auf den Weg geschickt.

  • Die Apache-Konfiguration verwendete eine ErrorDocumentAnforderung, um nicht authentifizierte Benutzer nach / webauth / require_authentication umzuleiten:

    ErrorDocument 401 / webauth / require_authentication

    Dies würde die folgenden Aktionen ausführen:

    • Geben Sie einen 401-Ergebniscode zurück (normalerweise fressen ErrorDocuments Ihren Ergebniscode) und
    • Legen Sie ein Anmeldeformular vor.
  • Das Anmeldeformular würde genau das tun, was Sie erwarten: Legen Sie ein Benutzername / Passwort-Formular vor, validieren Sie es und geben Sie ihnen das Auth-Cookie.

Larsks
quelle
+1 für eine interessante Lösung.
Sam Halicke
toll, das funktioniert perfekt!
Benjamin Wohlwend