Zum weitergeben JAAS-Subjekt beim Aufruf einer entfernten EJB (RMI over IIOP) von einer reinen client
Ich die Prüfung der Ausbreitung von JAAS-Subjekt mit einem benutzerdefinierte Principal von einem standalone-EJB-client, der sich auf eine raw-Java-Laufzeitumgebung eine Java ee-server. Ich bin targeting JBoss und WebSphere-Implementierungen.
Laut dieser forum thread ich es erwartet habe, würde die Arbeit mit JBoss leicht.
Hier ist mein EJB-client-code code snippet:
Subject subject = new Subject();
Principal myPrincipal = new MyPrincipal("me I myself");
subject.getPrincipals().add(myPrincipal);
PrivilegedExceptionAction<String> action = new PrivilegedExceptionAction<String>() {
public String run() throws Exception {
String result;
System.out.println("Current Subject: " + Subject.getSubject(AccessController.getContext()));
InitialContext ic = new InitialContext();
Business1 b = (Business1) ic.lookup("StatelessBusiness1");
result = b.getNewMessage("Hello World");
return result;
}
};
result = subject.doAs(subject, action);
System.out.println("result "+result);
Server-side-code ist:
public String getNewMessage(String msg) {
System.out.println("getNewMessage principal: " + sessionContext.getCallerPrincipal());
System.out.println("Current Subject: " + Subject.getSubject(AccessController.getContext()));
return "getNewMessage: " + msg;
}
Sicher zu sein, auch wenn es das Standard-Verhalten, ich habe diesen Abschnitt, um meine ejb-jar.xml
session-bean:
<security-identity>
<use-caller-identity/>
</security-identity>
Meiner session-bean ist nicht geschützt, jede Rolle.
Laut diese IBM WebSphere infocenter Abschnitt, ich habe auch aktiviert das system die Eigenschaft com.ibm.CSI.rmiOutboundPropagationEnabled=true
.
Technisch gesehen ist der service-Aufruf funktioniert entweder auf JBoss oder WebSphere. Aber die JAAS-Fach darunter meine custom AUFTRAGGEBER erstellt auf dem client nicht an den server weitergegeben. Oder natürlich die Subject
gedumpten kurz vor den JNDI-Kontext-Erstellung und EJB-Aufruf ist OK.
Ich das Java-runtime-version für server und client (IBM Java6 SR9 FP2...), MyPrincipal
serializable-Klasse steht in den server-ClassPath (AppServer/lib/ext
für WebSphere server/default/lib
für JBoss)
WebSphere dumps:
[8/31/12 11:56:26:514 CEST] 00000024 SystemOut O getNewMessage principal: UNAUTHENTICATED
[8/31/12 11:56:26:515 CEST] 00000024 SystemOut O Current Subject: null
JBoss-dumps:
12:30:20,540 INFO [STDOUT] getNewMessage principal: anonymous
12:30:20,540 INFO [STDOUT] Current Subject: null
Sicher, dass ich verpasst haben, eine Art Zauberspruch. Wissen Sie, welche ?
- So ? Habe ich bereits erfolgreich geschrieben benutzerdefinierte LoginModule für WebSphere und Tivoli PDPrincipal Unterstützung, ich habe konfigurierten LoginModule in JBoss zu ermöglichen, Kerberos, SPNEGO-über-HTTP... Definitiv bin ich wohl mit JAAS und andere Sachen herum. Frag mich nur, wenn ich falsch denken sollte es funktionieren... vor dem öffnen der JBoss-Quellcode zu überprüfen
- Dann sind Sie erfahrener sind als ich 😉 (ich spielte mit LoginModules, benutzerdefinierte Authentifizierung AUFTRAGGEBER die Weiterleitung über RMI-IIOP / CORBA in Glassfish 2.x, und das war immer sehr kompliziert. Letztlich haben wir eben behandelt, die auf der Anwendungsebene selbst) würde ich abraten anyobody form die Verwendung dieser standards für die Benutzername/Passwort-Authentifizierung. Wenn der Punkt ist die Integration mit Kerberos und single sign-on, das könnte immer noch der beste Weg zu gehen! Sorry, ich kann nicht mehr helfen.
- Wenn es eigentlich das Ziel ist, um zu arbeiten, um Fehler in der Verwendung von Kerberos mit WebSphere in unserem spezifischen Kontext: stackoverflow.com/questions/10518057/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, Sie haben nicht die Sicherheit aktiviert ist auf dem server WAR. Weil keine Sicherheit aktiviert ist und Sie nicht authentifiziert WURDE, gibt es keine Berechtigung. Somit ist dein Aufruf
getCallerPrincipal
Rückkehr ist nicht authentifiziert.Wenn Sie über die Sicherheit einer Anwendung in WAR, haben Sie authentifizieren über die CSIv2 Protokoll. Erstellen Sie Ihre eigene JAAS-Subjekt in einem standalone-client wird es nicht tun. Wenn es könnte, dann jemand schaffen könnte, ein "hey, it 's me" - Anmeldeinformationen und login auf einem beliebigen remote-EJB, die Sie wollten.
Dein code funktioniert auf dem server, indem Sie Ihren Gegenstand der Laufenden thread der Ausführung. Fließende Fächer/Anmeldeinformationen über den Draht erfordert ein Protokoll, um die Wirkung der Serialisierung des Subjekts info und sorgen für Vertrauen der Partei, die Behauptung der Identität, die in den Anmeldeinformationen. Von einem standalone-client, WURDE akzeptiert Benutzer-info " in form von basic authorization, LTPA und kerberos. Dies kann konfiguriert werden, auf eine CSIv2 inbound-Konfiguration in der admin-Konsole. Es ist dokumentiert in der Info-Center-link, den ich auf den weiter oben verwiesen.
Macht es Spaß Sachen. Viel Glück.
wahrscheinlich wird Ihnen helfen, mit dem Preis zu verwenden proprietäre websphere-Klassen. soweit ich mich erinnere , websphere NICHT weitergegeben die jaas-Anrufer-Thema, das ist typisch für ibm
siehe auch: Bekommen die Anrufer-Thema aus dem thread für die JAAS - und Immer die "RunAs" - Thema aus dem thread