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-user
mod_auth_kerb nawet nie próbuje uwierzytelnić użytkownika i tak KERBEROS_USER
się 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?
źródło
Odpowiedzi:
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-user
dyrektywę. 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:
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.
źródło