Comment dire à mod_auth_kerb de faire son travail malgré l'absence de «nécessite un utilisateur valide»

11

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

Benjamin Wohlwend
la source
Sauf si vous fournissez un formulaire de connexion et une gestion appropriée des erreurs, c'est le comportement approprié (attendu).
BillThor

Réponses:

12

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-userdirective. 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 ErrorDocumentdemande pour rediriger les utilisateurs non authentifiés vers / webauth / require_authentication:

    ErrorDocument 401 / webauth / require_authentication

    Cela effectuerait les actions suivantes:

    • Renvoyer un code de résultat 401 (normalement, les ErrorDocuments mangent votre code de résultat), et
    • Présentez un formulaire de connexion.
  • 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.

larsks
la source
+1 pour une solution intéressante.
Sam Halicke
génial, cela fonctionne parfaitement!
Benjamin Wohlwend