it-swarm.com.de

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

Mir wurde gesagt, dass es möglich ist, eine Webanwendung zu erstellen, für die kein Login erforderlich ist. Der Benutzer meldet sich bei Windows an, das sich über eine LDAP-Suche (Active Directory) authentifiziert. Dann sollten sie in der Lage sein, zu meiner Webanwendung zu gehen und niemals eine Anmeldeaufforderung zu sehen. Diese Kunden haben dies als Single Sign On bezeichnet (möglicherweise falsch und Teil meiner Verwirrung).

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

Das Single Sign On-Ventil wird verwendet, wenn Sie Benutzern die Möglichkeit geben möchten, sich bei einer der Webanwendungen anzumelden, die Ihrem virtuellen Host zugeordnet sind Lassen Sie dann ihre Identität von allen anderen Webanwendungen auf demselben virtuellen Host erkennen.

Das ist mir völlig klar. Der Benutzer muss sich einmal anmelden und kann auf jede Webanwendung einer Instanz von Tomcat zugreifen. Aber ich muss sie irgendwie anmelden lassen, ohne jemals Anmeldeinformationen für meinen Tomcat-Server bereitzustellen.

Damit dies funktioniert, stelle ich mir vor:

  • Der Benutzer fordert eine Seite an
  • Der Server sieht kein Sitzungstoken und fordert den Client dann nach einigen Anmeldeinformationen an.
  • Der Client-Browser stellt dem Server ohne Eingreifen des Benutzers einige Anmeldeinformationen zur Verfügung.
  • Mithilfe der vom Client-Browser bereitgestellten Anmeldeinformationen wird dann in einem LDAP nachgeschlagen.

Ich habe einige Beispiele gesehen, die clientseitige Zertifikate verwenden ... insbesondere das DoD-PKI-System, das für mich sinnvoll ist, weil Sie in diesen Fällen Tomcat so konfigurieren, dass clientseitige Zertifikate anfordern , sich aber nur bei Windows anmelden Ich sehe nicht, wie dies funktionieren würde und welche Informationen der Browser an den Server usw. weitergeben würde. Wird NTLM dafür verwendet?

42
blak3r

Erstens - und falls andere Benutzer diese Seite besuchen - gibt es nur bestimmte Authentifizierungsmethoden, mit denen Sie sofortiges SSO durchführen können. Dies sind NTLM und - Kerberos. LDAP hingegen gibt Ihnen niemals sofortiges SSO.

NTLM ist eigentlich NTLMv1 und NTLMv2. Diese sind sehr unterschiedlich und NTLMv1 ist aufgrund schwerwiegender Sicherheitsprobleme veraltet. Sie sollten sich vor Java Authentifizierungslösungen scheuen, die nicht korrekt identifizieren können, ob sie NTLMv1 oder NTLMv2 unterstützen, da sie in ihrer Dokumentation nur das Wort "NTLM" verwenden. Die Wahrscheinlichkeit liegt bei den Entwicklern dieser Sicherheitslösung Ich weiß nicht selbst, was umso mehr Grund ist, nach der Feuerleiter zu suchen.

Entgegen der traditionellen Meinung werden sowohl NTLMv1 als auch NTLMv2 vollständig von Microsoft dokumentiert, aber Sie werden immer noch Lösungen finden, die behaupten, das Protokoll "rückentwickelt" zu haben. Es ist wahr, dass dies erforderlich war, bevor Microsoft die Protokolle dokumentierte, von denen ich glaube, dass sie 2006 oder 2007 waren. Auf jeden Fall ist NTLMv1 ein Nein-Nein. An NTLMv2 an sich ist nichts auszusetzen, aber Microsoft hat NTLM (in jeglicher Form) in allen seinen Produkten zugunsten der Kerberos-Authentifizierung eingestellt. NTLMv1 ist längst tot und NTLMv2 wird jetzt nur noch von Microsoft verwendet, wenn kein Domänencontroller verfügbar ist. Fazit: NTLM (in irgendeiner Form) ist nicht wirklich der richtige Weg. Wir sollten Microsoft tatsächlich dafür begrüßen, dass es hier einen auf Standards basierenden Ansatz verfolgt.

Dies lässt Sie mit Kerberos. Microsoft hat ein Protokoll zum Aushandeln und Transportieren von Authentifizierungsinformationen über HTTP erstellt. Dies ist in Microsoft-Produkten als " Integrierte Windows-Authentifizierung " bekannt, wurde jedoch als offizieller Standard unter dem Namen [~ # ~) festgelegt ] spnego [~ # ~]. Dies ist, was Sie suchen sollten. SPNEGO unterstützt sowohl NTLMv2 als auch Kerberos als zugrunde liegenden Authentifizierungsmechanismus. Aus den oben genannten Gründen sollten Sie Kerberos anstelle von NTLMv2 als Ziel festlegen.

Ich habe mehrere Tomcat-Anwendungen (unter Linux/Solaris) erfolgreich in Active Directory integriert, indem ich SPNEGO Project at SourceForge verwendet habe. Ich habe festgestellt, dass dies der einfachste Ansatz ist. Auf diese Weise erhalten Sie sofortiges SSO, ähnlich wie dies beispielsweise bei einem Sharepoint-Server der Fall ist. Dies ist höchstwahrscheinlich das, was Ihre Benutzer erwarten, wenn sie über "SSO" sprechen. Die richtige Kerberos-Konfiguration, das Generieren von Schlüsseln und das Einrichten von Dummy-Konten in Active Directory können problematisch sein, aber sobald Sie es richtig gemacht haben, funktioniert es wie ein Zauber.

Das einzige, was mir am SPNEGO-Projekt bei SourceForge nicht gefällt, ist, dass ich nicht verstehe, wie oft es die Authentifizierung durchführt. Mein böser Verdacht ist, dass dies bei jedem Seitenaufruf und nicht einmal bei jeder Sitzung der Fall ist. Vielleicht irre ich mich darin. Wie auch immer: Dies unterstreicht eine weitere Sache, die bei SSO-Lösungen berücksichtigt werden muss: Sie möchten keine Lösung implementieren, die Ihren Identitätsanbieter (z. B. Active Directory) mit unnötigen Anforderungen "spammt".

42
unixhacker2010

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

Wenn Sie eine Sharepoint Server-Website öffnen, weiß diese, wer Sie sind, ohne dass Sie einen Benutzernamen und ein Kennwort für die Anmeldung benötigen. Dies funktioniert jedoch nur für interne Websites im selben Netzwerk. Ich halte es nicht für sinnvoll, auf einer öffentlichen Website zu arbeiten. (Ich kann nicht sagen, ob Sie "virtueller Host" wie in einem Apache-Host oder wie in einem ausgelagerten gehosteten Server meinen).

In diesem Microsoft-Dokument wird beschrieben, wie die Kerberos-Authentifizierung auf einem Webserver ausgeführt wird, auf dem IIS/ASP.Net: http://msdn.Microsoft.com/en-us/library/) ausgeführt wird. 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 für it: http://tomcatspnego.codeplex.com/ und Openfire haben einige Dokumentationen, die mit der allgemeinen Arbeit mit Java/Kerberos hier zu tun haben ( http://community.igniterealtime.org/docs)/DOC-106 ).

2

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

Das SingleSignOnValve ist nicht das, wonach Sie suchen. Wenn Sie Tomcat 7 verwenden, können Sie den SpnegoAuthenticator sofort verwenden, aber bei 6 müssen Sie this verwenden.

0
Michael-O

Klingt so, 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 Artikel .

0
Artomegus