Jak powiedzieć mod_auth_kerb, aby wykonał swoją pracę pomimo braku „wymaganego ważnego użytkownika”

11

Zaimplementowałem uwierzytelnianie SSO za pomocą mod_auth_kerb na Apache. Moja konfiguracja wygląda następująco:

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

Mój problem polega na tym, że bez require valid-usermod_auth_kerb nawet nie próbuje uwierzytelnić użytkownika i tak KERBEROS_USERsię dzieje (null). Jeśli dodam require valid-user, użytkownik jest uwierzytelniany automatycznie, jeśli przeglądarka go obsługuje, ale wyświetla się brzydki modalny formularz logowania (ala HTTP Basic Auth), jeśli przeglądarka nie obsługuje protokołu Kerberos Negotiate.

Chcę osiągnąć to, że jeśli użytkownik odwiedza /login/, mod_auth_kerb próbuje uwierzytelnić użytkownika za pomocą protokołu Kerberos Negotiate. Jeśli to się nie powiedzie, użytkownikowi zostanie przedstawiony normalny formularz logowania HTML.

Czy można tak skonfigurować Apache / mod_auth_kerb?

Benjamin Wohlwend
źródło
Z wyjątkiem dostarczenia formularza logowania i odpowiedniej obsługi błędów, jest to właściwe (oczekiwane) zachowanie.
BillThor,

Odpowiedzi:

12

Zrobiłem to raz, kiedy zbudowałem proste narzędzie do pojedynczego logowania (w celu połączenia Kerberos z mod_auth_tkt). Wymagało to odrobiny szykanowania:

  • / webauth / login był chroniony przez require valid-userdyrektywę. Jeśli ktoś jest połączony z ważnymi danymi uwierzytelniającymi Kerberos, otrzymaliśmy jego nazwę użytkownika od REMOTE_USER, podaliśmy mu uwierzytelniający plik cookie i wysłaliśmy go po drodze.

  • Konfiguracja Apache wykorzystała ErrorDocumentżądanie przekierowania nieuwierzytelnionych użytkowników do / webauth / wymagają_autoryzacji:

    ErrorDocument 401 / webauth / wymagają uwierzytelnienia

    Wykonałoby to następujące działania:

    • Zwraca kod wyniku 401 (normalnie ErrorDocuments zjada kod wyniku) i
    • Przedstaw formularz logowania.
  • Formularz logowania zrobiłby dokładnie to, czego oczekujesz: przedstawiłby nazwę użytkownika / hasło, zweryfikował to samo, a następnie dał im auth cookie.

Larsks
źródło
+1 za ciekawe rozwiązanie.
Sam Halicke
świetnie, to działa idealnie!
Benjamin Wohlwend