2010-12-14 8 views
11

Ich möchte Single Sign On (SSO) zu einer meiner Webanwendungen hinzufügen. Ich möchte im Moment nichts Schweres, ich möchte nur die userId des angemeldeten Benutzers wissen, ohne dass sie einen Benutzernamen eingeben müssen.Benutzername im HTTP-Header für SSO

Die Web-App ist eine interne Anwendung, so kann ich sie garantieren, werden von einem Windows-PC usw. kommen

ich jCIFS ausgesehen haben, aber dies scheint nicht mehr unterstützt werden, und empfiehlt eine kommerzielles Produkt.

Ich habe auch auf WAFFLE geschaut, aber ich baue SSO für eine Playframework-Anwendung, die keinen Servlet-Stack verwendet, so dass ich den SecurityFilter nicht nutzen kann. Ich habe versucht, das WindowsLoginModule zu verstehen, konnte aber nicht wirklich verstehen, was ich tun musste, um es zu implementieren.

Ist es möglich, nur den Benutzernamen aus dem HTTP-Header zu erhalten, oder ist es eine Verhandlung erfordert, bevor es den Header veröffentlichen wird?

+0

Glück bisher? Ich bin im selben Boot. – andyczerwonka

+0

leider nicht. Immer noch suchend. Wenn Sie eine gute Antwort finden, posten Sie es bitte hier. – Codemwnci

+0

Haben Sie nach einem Plugin mit Waffel gesucht? Von den Waffle-Jungs sollte es möglich sein, mit dem Servlet-Filter-Code ein Modul zu erstellen. Das wäre ein ziemlich tolles Modul für Play! Ich werde es mir ansehen, wenn ich etwas Freizeit habe. https://groups.google.com/forum/?hl=de#!topic/waffle-users/Q9aRPJitP6g – emt14

Antwort

-2

Sie können immer einen Header vom Filter erhalten. Siehe javadoc für HttpServletRequest.

+1

"Ich erstelle SSO für eine Playframework-Anwendung, die keinen Servlet-Stack verwendet" – Codemwnci

0

Der Benutzername wird nicht in der Kopfzeile gesendet. Selbst wenn dies nicht getan werden sollte, sollte ein versierter Benutzer die Werte fälschen.

2

Sie möchten, dass sich der Windows-Benutzer automatisch bei Ihrer Intranet-Webanwendung anmeldet. Die Benutzerkonten würden also in einem aktiven Verzeichnis sitzen und die übliche Vorgehensweise wäre, ein Protokoll wie NTML oder Kerberos zu verwenden. Anwendungen werden im Allgemeinen davon abgeraten, NTLM zu verwenden, obwohl Unternehmen weiterhin NTML (und jCIFS) für SSO verwenden.

Eine schnelle Suche auf Kerberos und Java zeigte diese article. Es scheint auf dem Java EE Stack (JAAS) zu beruhen.

Für einen abgespeckte Ansatz: In der Regel können Sie nicht die Benutzername in einer HTTP-Anforderung in einer tragbaren Weise gesendet. Mit ActivX könnten Sie tun:

var wshshell=new ActiveXObject("wscript.shell"); 
var username=wshshell.ExpandEnvironmentStrings("%username%"); 

Auf der Serverseite können Sie den HTTP-Header und extrahieren Sie den Benutzernamen mit Ihrer Technologie der Wahl analysieren.

Nun, Sicherheit spielt in Ihrer playframework Anwendung keine Rolle? Warum verwenden Sie keine langlebigen Kekse?

Hoffe es hilft!

1

Nicht schwere Antwort

Es klingt wie es möglich sein sollte Ihr ops Team bekommen Sie eine Gruppenrichtlinie zu implementieren, die die angemeldete Benutzername unten den Draht als HTTP-Header senden.

Ansonsten stimmen Sie in Ihrer Annahme, dass es eine Art von "Tanz" zwischen IE und Ihrem Server gibt. Siehe here. Vielleicht kannst du diesen Tanz in deinem Play-Code vortäuschen.

Schwere Antwort

Ich weiß jCIFS und this example Servlets und Filter verwendet, aber die wichtige Bits des Codes extrahiert werden und eine benutzerdefinierte Wiedergabe Authenticator gebaut werden kann (ich kann eine Scala Beispiel Überschreibung von play.api.mvc.Security.Authenticated einfügen, aber deine Antwort ist mit Java getaggt.Sie benötigen nur die Anforderungsheader (nicht Körper), so dass es in einem Authentifikator machbar sein sollte.

PSjCIFS scheint ein Update seit Ihrer Post gehabt zu haben, also nehme ich an, dass Sie es mit dem Hacken neu überdenken würden. Ich bin auch vorsichtig mit nicht gepflegten Bibliotheken, aber manchmal erreichen sie nur eine Reife und Stabilität, die die Notwendigkeit für weitere Updates verringert.

2

In einem Intranetkontext mit ActiveDirectory und Arbeitsstationen, die in der Domäne registriert sind, ist die HTTP SPNEGO Negotiation-Unterstützung die beste Option. Aber es erfordert spezifische Fähigkeiten rund um ActiveDirectory und Java Kerberos-Implementierung.

Spring Security bietet implementation and documentation, um es einzurichten. Aber Secure.Security ist nicht dafür ausgelegt, tokenbasierte Authentifizierung wie HTTP Negotiation zu unterstützen. Spring Security erfordert also ein spezielles Integrationsmodul.

Andere Optionen sind OpenID und shibboleth, aber beide erfordern einen dedizierten Server, der so konfiguriert werden kann, dass SPNEGO selbst ausgeführt wird. Dank der verfügbaren Play-Module wird die Integration in Ihre Anwendung einfacher.

Die einzige Möglichkeit, den Benutzernamen in einem HTTP-Header ohne clientseitige komplexe und unsichere/unzuverlässige Tweaks zu erhalten, besteht darin, einen Authentifizierungs-Proxy zwischen Browsern und Ihrem Anwendungsserver zu verwenden. Die meisten dieser Proxies unterstützen auch Kerberos SPNEGO als Authentifizierungsmittel.

0

Wenn NTLM wäre eine gültige Option für Sie Jespa könnte eine gute Alternative zu JCIFS sein. Jespa unterstützt (im Gegensatz zu JCIFS) unter anderem NTLM v2. Die limitierte Version (bis zu 25 Benutzer) ist kostenlos.

+0

Unterstützt nur den Servlet-Stack. Nicht geeignet für Play-Anwendungen. – andyczerwonka

1

Sie können versuchen, Shiro zu verwenden, um SSO in Ihrer Anwendung zu aktivieren. Shiro-ID unabhängig von den Servlets und da Ihr Framework Servlets nicht unterstützt, können Sie sehr leicht Shiro verwenden.

Sie können ein Realm erstellen, in dem Sie das HashPassword definieren.

Sie können den Benutzernamen und das HashPassword konfigurieren und den Shiro bitten, Ihren Benutzer mit dem HashPassword zu authentifizieren.

Sie werden dann eine Rolle für den Benutzer zuweisen, die Ihrem Zweck von SSO dient.

Sie können Benutzer für mehr als eine Anwendung authentifizieren. Wenn sich der Benutzer bei einer anderen Anwendung anmeldet, hat der Shiro Sie bereits authentifiziert und wird Sie sofort in der Anwendung anmelden.

Sie können die shiro Dokumentation durchgehen (erschöpfend, und Sie sollten es so konfigurieren Anhieb in der Lage) auf den folgenden Link: -

http://shiro.apache.org/

Es bietet Ihnen viele aus der Box Funktionalität für Authentifizierung und Autorisierung zusammen mit Sicherheits- und Kryptographie-Modulen.