Powiedziano mi, że można stworzyć aplikację internetową, która nie wymaga logowania. Użytkownik loguje się do systemu Windows, który uwierzytelnia się za pomocą wyszukiwania Active Directory (LDAP). Następnie powinni móc przejść do mojej aplikacji internetowej i nigdy nie widzieć monitu o zalogowanie się. Ci klienci nazywają to jednokrotnym logowaniem (być może niepoprawnie i jest to część mojego zamieszania).
Ale z tego, co przeczytałem Single Sign On z dokumentów Tomcat, jest:
Zawór pojedynczego logowania jest wykorzystywany, gdy użytkownik chce umożliwić użytkownikom logowanie się do dowolnej aplikacji internetowej powiązanej z wirtualnym hostem , a następnie rozpoznanie ich tożsamości przez wszystkie inne aplikacje internetowe na tym samym hoście wirtualnym.
To jest dla mnie całkowicie jasne. Użytkownik musi się zalogować raz i może uzyskać dostęp do każdej aplikacji internetowej na instancji tomcat. Ale muszę w jakiś sposób pozwolić im się zalogować, nie podając żadnych danych uwierzytelniających na moim serwerze tomcat.
Aby to zadziałało, wyobrażam sobie:
- Użytkownik zgłasza prośbę o jakąś stronę
- Serwer nie widzi tokena sesji, a następnie prosi klienta o podanie poświadczeń.
- Przeglądarka klienta bez żadnej interwencji ze strony użytkownika podaje pewne poświadczenia dla serwera.
- Następnie, korzystając z poświadczeń podanych przez przeglądarkę klienta, wyszukuje w LDAP.
Widziałem kilka przykładów, które używają certyfikatów po stronie klienta ... szczególnie system DoD PKI, co ma dla mnie sens, ponieważ w takich przypadkach konfigurujesz Tomcat, aby żądał certyfikatów po stronie klienta , ale po prostu loguję się do okien, nie widzę, jak to będzie działać i jakie informacje przeglądarka przekaże na serwer itp. Czy do tego służy NTLM?
W środowisku Windows Active Directory logowanie jednokrotne oznacza, że odwiedzanie wewnętrznej strony internetowej niesie za sobą uprawnienia logowania do systemu Windows i serwer internetowy może na nią działać. Jest to coś, do czego używa się NTLM, ale nowsze implementacje używają Kerberos.
Jeśli otworzysz witrynę Sharepoint Server, będzie ona wiedziała, kim jesteś bez potrzeby logowania nazwy użytkownika i hasła, ale działa to tylko w przypadku wewnętrznych stron internetowych w tej samej sieci, nie sądzę, aby miało to sens dla działania na publicznej stronie internetowej. (Nie wiem, czy masz na myśli „wirtualny host”, jak w vache Apache, czy jako serwer hostowany na zewnątrz).
Oto dokument Microsoft opisujący działanie uwierzytelniania Kerberos na serwerze WWW z uruchomionym IIS / ASP.Net: http://msdn.microsoft.com/en-us/library/ff647076.aspx
Wygląda na to, że można to zrobić za pomocą Apache / Tomcat / Java. Oto plik PDF opisujący tę implementację na uniwersytecie w Wielkiej Brytanii: http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf oraz projekt Codeplex: http://tomcatspnego.codeplex.com/ i Openfire dokumentacja dotycząca ogólnie pracy z Javą / Kerberos tutaj ( http://community.igniterealtime.org/docs/DOC-1060 ).
źródło
Wygląda na to, że opisujesz to, co Microsoft nazywa zintegrowanym uwierzytelnianiem systemu Windows.
Wygląda na to, że Tomcat obsługuje uwierzytelnianie systemu Windows na podstawie tego artykułu .
źródło
Na początek nie można uniknąć logowania. Jeśli chcesz zidentyfikować użytkowników, musisz mieć ich login. Zapomnij o NTLM, na ratunek przychodzi Kerberos - może zrobić wszystko w całkowicie przejrzysty sposób.
SingleSignOnValve nie jest tym, czego szukasz. Jeśli używasz Tomcat 7, można użyć SpnegoAuthenticator od razu, ale na 6 trzeba użyć tego .
źródło