Frage Wie funktioniert SSO mit Active Directory, bei dem Benutzer transparent in einer Intranet-Webanwendung angemeldet sind?


Mir wurde gesagt, dass es möglich ist, eine Webanwendung zu erstellen, die keine Anmeldung erfordert. Der Benutzer meldet sich bei Windows an, der sich über eine Active Directory (LDAP) Suche authentifiziert. Dann sollten sie in der Lage sein, zu meiner Webapp zu gehen und nie eine Anmeldeaufforderung zu sehen. Diese Kunden haben dies als Single Sign On bezeichnet (vielleicht falsch und Teil meiner Verwirrung).

Aber von dem, was ich Single Sign On von den Tomcat-Dokumenten gelesen habe, ist:

Das Single Sign On Valve wird verwendet, wenn Sie den Benutzern den   Anmeldemöglichkeit eine der zugehörigen Webanwendungen   Dein virtueller Hostund dann wird ihre Identität von allen erkannt   andere Webanwendungen auf demselben virtuellen Host.

Das ist mir vollkommen klar. Der Benutzer muss sich einmal anmelden und kann auf jede Webapp auf einer Tomcat-Instanz zugreifen. Dieser 100 100 sch sch 100 100 sch 100 sch sch sch sch sch sch sch sch sch 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 sch 100 100 100 100 100 zwischen sch 100 100 100 100 100 100 sch 100 100 100 sch 100 100 sch 100 100 100 sch 100 100 sch 100 100 100 sch 100 100 sch 100 100 100 sch 100 100 sch 100 100 100 zwischen 100 sch 100 100 100 100 100 sch 100 100 dieser

Damit dies funktioniert, stelle ich mir vor:

  • Der Benutzer fordert eine Seite an
  • Der Server sieht kein Sitzungstoken und fordert dann den Client für einige Anmeldeinformationen an.
  • Der Client-Browser stellt ohne Eingreifen des Benutzers einige Anmeldeinformationen für den Server bereit.
  • Dann verwendet er die vom Client-Browser bereitgestellten Anmeldeinformationen und sucht in einem LDAP.

Ich habe einige Beispiele gesehen, die clientseitige Zertifikate verwenden ... insbesondere das DoD-PKI-System, das für mich einen Sinn ergibt, weil Sie in diesen Fällen Konfigurieren Sie Tomcat, um clientseitige Zertifikate anzufordern, aber wenn ich mich nur in Windows anmelde, sehe ich nicht, wie das funktionieren würde und welche Informationen der Browser an den Server weitergeben würde. Ist dies der Zweck von NTLM?


32
2017-07-20 18:52


Ursprung




Antworten:


Zuallererst - und falls andere Benutzer diese Seite besuchen - gibt es nur bestimmte Authentifizierungsmethoden, die Ihnen erlauben, SSO ohne Aufforderung auszuführen. Diese sind NTLM und Kerberos. LDAP - auf der anderen Seite - wird Ihnen niemals eine sofortige SSO geben.

NTLM ist tatsächlich NTLMv1 und NTLMv2. Diese sind sehr unterschiedlich und NTLMv1 ist wegen ernsthafter Sicherheitsprobleme veraltet. Sie sollten Java-Authentifizierungslösungen meiden, die nicht korrekt erkennen, ob sie NTLMv1 oder NTLMv2 unterstützen, da sie in ihrer Dokumentation nur das Wort "NTLM" verwenden. Chancen sind die Entwickler der genannten Sicherheitslösung, die sich selbst nicht kennen, was umso mehr Grund ist, nach der Feuerleiter Ausschau zu halten.

Entgegen der herkömmlichen Ansicht sind sowohl NTLMv1 als auch NTLMv2 vollständig von Microsoft dokumentiert, aber Sie werden immer noch Lösungen finden, die behaupten, das Protokoll "reverse engineered" zu haben. Es stimmt, dass dies erforderlich war, bevor Microsoft die Protokolle, die ich für 2006 oder 2007 halte, dokumentiert. Wie auch immer, NTLMv1 ist ein No-No. Es ist nichts falsch mit NTLMv2 per se, aber Microsoft hat NTLM (in irgendeiner Form) in all seinen Produkten zugunsten der Kerberos-Authentifizierung auslaufen lassen. NTLMv1 ist lange tot und NTLMv2 wird jetzt nur von Microsoft in Fällen verwendet, in denen kein Domänencontroller verfügbar ist. Fazit: NTLM (in keiner Form) ist nicht wirklich der Weg nach vorne. Wir sollten Microsoft dafür danken, dass er hier einen auf Standards basierenden Ansatz verfolgt.

Das lässt Sie mit Kerberos. Microsoft hat ein Protokoll zum Aushandeln und Übertragen von Authentifizierungsinformationen über HTTP erstellt. Dies ist in Microsoft-Produkten bekannt als "Integrierte Windows-Authentifizierung"Aber es wurde als offizieller Standard unter dem Namen SPNEGO. Das sollten Sie suchen. SPNEGO unterstützt sowohl NTLMv2 als auch Kerberos als zugrunde liegenden Authentifizierungsmechanismus. Aus den oben genannten Gründen sollten Sie jedoch auf Kerberos und nicht auf NTLMv2 abzielen.

Ich habe erfolgreich mehrere Tomcat - Anwendungen (unter Linux / Solaris) mit Active Directory unter Verwendung des SPNEGO-Projekt bei SourceForge. Ich habe herausgefunden, dass dies der einfachste Ansatz ist. Dadurch erhalten Sie eine sofortige SSO ähnlich wie beispielsweise ein Sharepoint-Server. Dies ist wahrscheinlich das, was Ihre Benutzer erwarten, wenn Sie über "SSO" sprechen. Die Kerberos-Konfiguration richtig zu erstellen, Schlüssel zu generieren und Dummy-Accounts in Active Directory einzurichten, kann mühsam sein, aber sobald Sie es richtig verstanden haben, funktioniert es wie ein Zauber.

Das einzige, was ich an dem nicht mag SPNEGO-Projekt bei SourceForge ist, dass ich nicht verstehe, wie oft es die Authentifizierung durchführt. Mein übler Verdacht ist, dass es das für jede Seitenansicht tut und nicht nur einmal für jede Sitzung. Vielleicht liege ich falsch darin. Wie dem auch sei: Dies hebt eine andere Sache hervor, die in SSO-Lösungen berücksichtigt werden sollte: Sie möchten keine Lösung implementieren, die Ihren Identitätsanbieter (z. B. Active Directory) mit unnötigen Anforderungen "überschwemmt".


32
2017-07-20 11:07



Danke, das ist die akzeptierte Antwort. Eine Sache, die zu Ihrer Liste von prompt Logins hinzugefügt werden kann, ist x509 Zertifikat Logins ... Wie die CAC-Karten der Regierung. - blak3r


In einer Windows Active Directory-Umgebung bedeutet Single Sign On, dass der Besuch einer internen Webseite Ihre Windows-Anmeldeberechtigungen enthält und der Webserver auf diese zugreifen kann. Es ist etwas, für das NTLM verwendet wird, aber neuere Implementierungen verwenden stattdessen Kerberos.

Wenn Sie eine Sharepoint Server-Website öffnen, weiß sie, wer Sie sind, ohne einen Login-Benutzernamen und ein Passwort zu benötigen, aber dies funktioniert nur für interne Websites im selben Netzwerk. Ich denke nicht, dass es auf einer öffentlichen Website sinnvoll ist. (Ich kann nicht sagen, ob Sie "virtueller Host" wie in einem Apache vhost oder in einem ausgelagerten gehosteten Server meinen).

Hier ist ein Microsoft-Dokument, das beschreibt, wie die Kerberos-Authentifizierung für einen Webserver mit IIS / ASP.Net funktioniert: http://msdn.microsoft.com/en-us/library/ff647076.aspx

Es scheint möglich, mit Apache / Tomcat / Java zu tun. Hier ist ein PDF, das eine Implementierung der britischen Universität beschreibt: http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf und ein Codeplex-Projekt dafür: http://tomcatspnego.codeplex.com/ und Openfire haben einige Dokumentationen zu tun mit dem allgemeinen Arbeiten mit Java / Kerberos hier (http://community.igniterealtime.org/docs/DOC-1060 ).


2
2017-07-29 20:55





Es klingt, als würden Sie beschreiben, was Microsoft als integrierte Windows-Authentifizierung bezeichnet.

Es sieht so aus, als ob Tomcat die Windows-Authentifizierung unterstützt, basierend auf Dieser Beitrag.


0
2017-07-29 19:03





Für den Anfang, können Sie nicht vermeiden, Login. Wenn Sie Benutzer identifizieren möchten, müssen Sie sich anmelden. Vergessen Sie NTLM, Kerberos kommt zur Rettung - es kann alles auf völlig transparente Weise tun.

Das SingleSignOnValve ist nicht das, was Sie suchen. Wenn Sie Tomcat 7 verwenden, können Sie das verwenden SpnegoAuthenticator sofort, aber am 6. musst du verwenden diese.


0
2017-07-20 19:09



Wenig verwirrt ... Der erste und der zweite Satz scheinen zu widersprechen. Mit Kerberos wird der Benutzer nicht aufgefordert, sich anzumelden? - blak3r
Nein, tun sie nicht. Sehen Sie das große Bild, dank Kerberos gibt der Benutzer seine Anmeldeinformationen ein Einmal manuell und danach erfolgt jede Anmeldung automatisch in seinem Namen. Dies bedeutet nicht, dass überhaupt kein Login stattfindet. Das hast du geschrieben.