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/...
InformationsquelleAutor Yves Martin | 2012-08-31
Schreibe einen Kommentar