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-user
mod_auth_kerb, ni siquiera intenta autenticar al usuario y KERBEROS_USER
termina 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?
fuente
Respuestas:
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-user
directiva. 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
ErrorDocument
solicitud para redirigir a los usuarios no autenticados a / webauth / require_authentication:ErrorDocumento 401 / webauth / require_authentication
Esto realizaría las siguientes acciones:
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.
fuente