RunAs-Subjekt im Thread für JAAS überschreiben
Zur Erweiterung der von den JAAS-APIs (Java Authentication and Authorization Service) bereitgestellten Funktionen können Sie das RunAs-Subjekt oder Aufrufsubjekt mit einem anderen gültigen Eintrag setzen, der für abgehende Anforderungen für diesen aktiven Thread verwendet wird.
Vorbereitende Schritte
- permission javax.security.auth.AuthPermission "wssecurity.getRunAsSubject"
- permission javax.security.auth.AuthPermission "wssecurity.getCallerSubject"
- permission javax.security.auth.AuthPermission "wssecurity.setRunAsSubject"
Informationen zu diesem Vorgang
Diese Erweiterung gibt Ihnen die Flexibilität, das Subject allen fernen Aufrufen in diesem Thread zuzuordnen, wenn Sie eine Methode "WSSubject.doAs" verwenden, um das Subject einer fernen Aktion zuzuordnen.
Ein Anwendungsentwickler
kann mit der Methode "WSSubject.doAs" ein JAAS-Subjekt definieren, das von einem JAAS-Anmeldemodul
als aktive Sicherheits-ID authentifiziert und zur Laufzeit von WebSphere
Application Server für die Ausführung einer bestimmten Aktion verwendet wird. WSSubject.doAs synchronisiert
die Threadidentität nur beim Aufruf in einer Komponente, die für die Synchronisation mit dem Thread (sync-to-thread)
konfiguriert ist. Bei Verwendung der Option
"Synch to OS Thread Allowed" für Anwendungen wird diese ID im Betriebssystemthread
für den Geltungsbereich dieser Aktion definiert.
Vorgehensweise
Beispiel
try { javax.security.auth.Subject runas_subject, caller_subject; runas_subject = com.ibm.websphere.security.auth.WSSubject.getRunAsSubject(); caller_subject = com.ibm.websphere.security.auth.WSSubject.getCallerSubject(); // neues RunAs-Subjekt für den Thread festlegen und das eine per Deklaration definierte überschreiben com.ibm.websphere.security.auth.WSSubject.setRunAsSubject(caller_subject); // ferne Aufrufe absetzen // in das vorherige runAsSubject zurückschreiben com.ibm.websphere.security.auth.WSSubject.setRunAsSubject(runas_subject); } catch (WSSecurityException e) { // Fehler protokollieren } catch (Exception e) { // Fehler protokollieren }