Cómo decirle a mod_auth_kerb que haga su trabajo a pesar de que no se requiere "usuario válido"

11

Implementé una autenticación SSO usando mod_auth_kerb en Apache. Mi configuración se ve así:

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

Mi problema es que, sin require valid-usermod_auth_kerb, ni siquiera intenta autenticar al usuario y KERBEROS_USERtermina siendo (null). Si agrego require valid-user, el usuario se autentica automáticamente si el navegador lo admite, pero se muestra un formulario de inicio de sesión modal feo (ala autenticación básica HTTP) si el navegador no es compatible con Kerberos Negotiate.

Lo que quiero lograr es que si un usuario visita /login/, mod_auth_kerb intenta autenticar al usuario a través de Kerberos Negotiate. Si eso falla, se presentará un formulario de inicio de sesión HTML normal al usuario.

¿Es posible configurar Apache / mod_auth_kerb de tal manera?

Benjamin Wohlwend
fuente
Salvo que proporcione un formulario de inicio de sesión y un manejo adecuado de errores, este es el comportamiento adecuado (esperado).
BillThor

Respuestas:

12

Lo hice una vez cuando creé una herramienta simple de inicio de sesión único (para combinar Kerberos con mod_auth_tkt). Se requiere un poco de artimañas:

  • / webauth / login estaba protegido por una require valid-userdirectiva. Si alguien se conectó con credenciales válidas de Kerberos, obtuvimos su nombre de usuario de REMOTE_USER, le dimos una cookie de autenticación y los enviamos en su camino.

  • La configuración de Apache utilizó una ErrorDocumentsolicitud para redirigir a los usuarios no autenticados a / webauth / require_authentication:

    ErrorDocumento 401 / webauth / require_authentication

    Esto realizaría las siguientes acciones:

    • Devuelve un código de resultado 401 (normalmente, ErrorDocuments se come su código de resultado) y
    • Presentar un formulario de inicio de sesión.
  • El formulario de inicio de sesión hará exactamente lo que espera: presentar un formulario de nombre de usuario / contraseña, validarlo y luego darles la cookie de autenticación.

larsks
fuente
+1 para una solución interesante.
Sam Halicke
genial, esto funciona perfectamente!
Benjamin Wohlwend