J'ai implémenté une authentification SSO en utilisant mod_auth_kerb sur Apache. Ma configuration ressemble à ceci:
<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>
Mon problème est que, sans require valid-user
, mod_auth_kerb n'essaye même pas d'authentifier l'utilisateur et KERBEROS_USER
finit par l'être (null)
. Si j'ajoute require valid-user
, l'utilisateur est authentifié automatiquement si le navigateur le prend en charge, mais affiche un formulaire de connexion modal laid (ala HTTP Basic Auth) si le navigateur ne prend pas en charge Kerberos Negotiate.
Ce que je veux réaliser, c'est que si un utilisateur visite /login/
, mod_auth_kerb essaie d'authentifier l'utilisateur via Kerberos Negotiate. Si cela échoue, un formulaire de connexion HTML normal sera présenté à l'utilisateur.
Est-il possible de configurer Apache / mod_auth_kerb de cette manière?
la source
Réponses:
Je l'ai fait une fois lorsque j'ai créé un simple outil de connexion unique (pour fusionner Kerberos avec mod_auth_tkt). Il a fallu un peu de chicane:
/ webauth / login était protégé par une
require valid-user
directive. Si quelqu'un s'est connecté avec des informations d'identification Kerberos valides, nous avons obtenu son nom d'utilisateur de REMOTE_USER, lui avons donné un cookie d'authentification et l'avons envoyé en chemin.La configuration Apache a utilisé une
ErrorDocument
demande pour rediriger les utilisateurs non authentifiés vers / webauth / require_authentication:ErrorDocument 401 / webauth / require_authentication
Cela effectuerait les actions suivantes:
Le formulaire de connexion ferait exactement ce que vous attendez: présenter un formulaire de nom d'utilisateur / mot de passe, le valider, puis leur donner le cookie d'authentification.
la source