Mamy nieco skomplikowaną konfigurację IDAM:
Oznacza to, że komputer i przeglądarka użytkownika końcowego siedzą w jednej sieci z nadrzędnym AD, a nasza aplikacja oparta na Jetty i AD, z którymi może rozmawiać (lokalna AD), siedzą w drugiej.
Między tymi dwiema reklamami istnieje dwukierunkowe zaufanie. Przeglądarka w sieci nadrzędnej ma domenę lokalną w zaufanych witrynach.
Konfiguracja serwera Jetty jest następująca:
- wykorzystuje plik tabeli kluczy wygenerowany dla nazwy użytkownika w lokalnej usłudze AD
- działa jako usługa systemu Windows w ramach użytkownika zdefiniowanego w lokalnej usłudze AD
- dziedzina, odwzorowanie dziedziny domeny i kdc są zdefiniowane względem domeny lokalnego AD
- używa spnego - isInitiator ma ustawioną wartość false; doNotPrompt jest prawdą; storeKey jest prawdą
Problemem jest:
- jako test, dostęp do serwera z poziomu przeglądarki wewnątrz sieci lokalnej (czyli związane z miejscowym AZS) działa - Kerberos informacji debugowania pojawia się w dziennikach, widzę poprawną negocjację Kerberos w ruchu HTTP, a użytkownik jest zalogowany automatycznie . Znakomity.
jednak dostęp do serwera z przeglądarki w sieci macierzystej (tak robią nasi użytkownicy) nie działa! Przeglądarka odbiera nieautoryzowany komunikat 401, ale następnie wyświetla monit o podanie poświadczeń, które po wprowadzeniu powodują wyświetlenie pustego ekranu. Następnie kliknięcie w pasek adresu i naciśnięcie klawisza Enter powoduje jedną z dwóch rzeczy, w zależności od tego, czy dane uwierzytelniające dotyczą zdalnego czy lokalnego AD:
- lokalne poświadczenia AD następnie logują się poprawnie, Kerberos od zera w logach (żądanie GET, odpowiedź 401 nieautoryzowana, żądanie nagłówków Kerberos itp.)
- zdalne poświadczenia AD nie zalogować (żądanie GET, 401 UNAUTH odpowiedź, co wygląda nagłówka NTLM:
Authorization: Negotiate <60 or so random chars>
)
Tak czy inaczej, fakt, że to podpowiada, jest zły!
Czy istnieje wyjaśnienie tych objawów? Czy konfiguracja, którą mamy, robi to, co chcemy?
Pod względem tego, co w powyższym opisie może być błędne: każda konfiguracja, o której wspomniałem w odniesieniu do serwera Jetty, powinna być dokładna, tak jak to zrobiłem. Z przyjemnością podam więcej szczegółów. Każda konfiguracja dotycząca AD lub przeglądarki sieci nadrzędnej jest potencjalnie podejrzana, ponieważ nie jest pod moją kontrolą, a konfiguracja została mi zgłoszona, a nie sama.
źródło
Odpowiedzi:
Nie widząc przechwytywania pakietów, przypuszczam, że SPN HTTP / www.website.com musi być zarejestrowany na koncie, na którym działa aplikacja. Zespół Microsoft Directory Services ma świetny, wieloczęściowy post na ten temat pod następującym adresem URL.
https://blogs.technet.microsoft.com/askds/2008/05/29/kerberos-authentication-problems-service-principal-name-spn-issues-part-1/
Uruchom przechwytywanie pakietów (netmon, wireshark) od klienta w każdym środowisku, aby określić, co SPN jest sprawdzane. Po ustaleniu tego użyj setspn cmd, aby zarejestrować go na koncie, na którym działa aplikacja.
FWIW, Kerberos działa tylko w sieci LAN. Jeśli ktoś potrzebuje dostępu tam, gdzie kontrolery domeny nie są dostępne, warto rozważyć logowanie jednokrotne, takie jak Shibboleth lub ADFS.
EDYCJA: jak wspomniano w @ alex-h , przeglądarki będą musiały zostać skonfigurowane do cichego uwierzytelniania za pośrednictwem Kerberos.
Wreszcie jest to powszechny problem z wdrożeniami Microsoft Sharepoint. Chcą, aby logowanie jednokrotne za pośrednictwem protokołu Kerberos odbywało się po cichu po uwierzytelnieniu użytkowników w domenie. Dlatego jeśli powyższe odpowiedzi nie rozwiązują problemu, spróbuj sprawdzić ich fora, takie jak:
Kerberos w Chrome, Safari lub FireFox
źródło
Spróbuj 1. z przeglądarki, która nie ma włączonej obsługi NTLM (Chrome / Firefox). Wygląda na to, że problem polega na tym, że masz włączone wstępne uwierzytelnianie i możliwe, że zaufanie dwukierunkowe może nie istnieć.
W celu wstępnego uwierzytelnienia zajrzyj tutaj https://support.microsoft.com/en-us/kb/2749007 i tutaj https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html .
źródło