Erhalte den Benutzernamen des Clients, der sich mit dem Webserver verbunden hat

7

Hier ist das Szenario. Ich bin Code, der auf einem Webserver in einer AD-Domäne ausgeführt wird. Ein Client hat sich mit mir verbunden. Wie erhalte ich den Benutzernamen dieses Kunden, ohne dass der Kunde ein Formular in seinem Browser ausfüllen muss? Sie müssen Java-Technologien auf der Webserver-Seite verwenden.

bearbeiten:

Ich habe den Spring Security Negotiate Filter wie unten beschrieben verwendet. Es gibt ein Tutorial zur Verfügung. Wenn Sie request.getPrincipal (). GetName () in einem Servlet verwenden, erhalten Sie den Benutzernamen.

Ссылка

    
KyleM 28.04.2011, 22:55
quelle

5 Antworten

11

Sie müssen die Spring Security Kerberos-Erweiterung einrichten - das ist Dies ist die einzige Möglichkeit, das zu tun, was Sie in Spring Security 3 beschreiben. Dies unterstützt die SPNEGO-Aushandlung, erfordert jedoch eine gewisse Menge an Setup auf dem Server (und Wissen darüber, wie SPNEGO und Kerberos funktionieren).

Es gibt nicht viel Dokumentation - aber Mikes Beispielanwendungen, die mit 1.0M2 ausgeliefert werden, sind großartig und decken die meisten gängigen Szenarien ab, einschließlich automatisierter SPNEGO-Authentifizierung.

Das wichtigste für SPNEGO ist, ein benutzerdefiniertes AuthenticationEntryPoint einzurichten - Sie müssen dies mit einer benutzerdefinierten Spring Bean wie folgt tun:

%Vor%

... neben diesen werden weitere Beans benötigt (siehe auch die Beispiele mit der Kerberos-Erweiterung). Stellen Sie zurück, wenn Sie mit Spring Security weiterkommen oder wenn Sie genaue Details wünschen (da es eine Reihe von Beans / Config-Bits gibt, wären einige Kenntnisse Ihrer Konfiguration hilfreich, z. B. ob Sie den Namensraum <http> verwenden oder nicht).

Abgesehen von dieser Option müssten Sie eine ähnliche Art von SPNEGO auth einrichten (z. B. mit WAFFLE, wie Sie vorschlagen) - andere SO-Fragen decken dies ziemlich gut ab.

Schließlich können Sie Tomcat möglicherweise mit einem anderen Webserver unterstützen, der SPNEGO oder NTLM besser unterstützt, z. B. Microsoft IIS oder Apache Web Server mit mod_spnego .

Hoffentlich würde eine dieser Ideen für Sie funktionieren!

    
Peter Mularien 04.05.2011, 23:26
quelle
6

Welchen Browser benutzen Ihre Benutzer? Wenn IE; Es gibt eine einfache Lösung:

%Vor%     
abalogh 05.05.2011 12:29
quelle
2

Der neueste Weg für Windows ist SPNEGO . Damit es vollständig funktioniert, müssen Sie einen Server in AD haben und mit Kerberos kommunizieren. Dann, so wurde mir gesagt, unterstützt Spring Security das.

Nun müssen Sie nicht immer Benutzer autorisieren. Manchmal (z. B. aus Gründen der Statistik) reicht es aus, die AD-ID des Benutzers zu erhalten. Als ich mit SPNEGO spielte, enthielten die binären Daten, die vom Browser übergeben wurden, die Benutzer-ID im Klartext. Es kann von dort extrahiert werden, aber kann natürlich nicht vertraut werden.

NTLM ist veraltet, wird als weniger sicher angesehen und wird weitgehend aus den Umgebungen entfernt.

    
Vladimir Dyuzhev 29.04.2011 00:33
quelle
1

Wenn Sie Tomcat verwenden, verwenden Sie WAFFLE .

    
Alex 10.05.2011 11:44
quelle
0

Ich wette, Sie können den Apache-Webserver vor Tomcat platzieren, damit sich Apache authentifizieren kann, indem Sie NTLM oder Kerberos . Dann können Sie die Umschreibregeln verwenden, um Anfragen an Tomcat mit dem Benutzernamen in der Ebene zu senden. Das ist nur eine Idee, ich habe das selbst nicht umgesetzt. Wir verwenden jedoch die Apache Kerberos-Authentifizierung in unserem Intranet. Mein Vorschlag ist nicht, NTLM zu verwenden, es ist veraltet und flockig.

    
Mike Starov 10.05.2011 15:30
quelle