JAAS-Berechtigung (Java Authentication and Authorization Service)

Die Java™-2-Sicherheitsarchitektur verwendet eine Sicherheitsrichtlinie, um anzugeben, welche Zugriffsrechte dem ausführenden Code erteilt werden. Diese Architektur ist codebasiert. Die Berechtigungen werden basierend auf Codemerkmalen erteilt. Dabei wird berücksichtigt, woher der Code stammt und ob und von wem der Code digital signiert wird. Die JAAS-Berechtigung (Java Authentication and Authorization Service) erweitert die vorhandenen codezentrierten Zugriffssteuerungen durch neue benutzerzentrierte Zugriffssteuerungen. Die Erteilung von Berechtigungen ist davon abhängig, welcher Code ausgeführt wird und wer den Code ausführt.

Wenn ein Benutzer über JAAS authentifiziert wird, wird ein Subjekt erstellt, das den authentifizierten Benutzer symbolisiert. Ein Subjekt besteht aus einer Gruppe von Principals, in der jeder Principal eine Identität für diesen Benutzer symbolisiert. Sie können Berechtigungen in der Richtlinie bestimmten Principals erteilen. Nach der Authentifizierung des Benutzers kann die Anwendung das Subjekt dem aktuellen Zugriffssteuerungskontext zuordnen. Für jede nachfolgende, von der Sicherheitskomponente geprüfte Operation bestimmt die Java-Laufzeit automatisch, ob die Richtlinie die erforderliche Berechtigung nur einem bestimmten Principal erteilt. Ist das der Fall, ist die Operation nur zulässig, wenn das Subjekt, das dem Zugriffssteuerungskontext zugeordnet ist, den angegebenen Principal enthält.

Ordnen Sie dem aktuellen Zugriffssteuerungskontext ein Subjekt zu, indem Sie die statische doAs-Methode von der Subjektklasse aufrufen und dabei ein authentifiziertes Subjekt und eine Methode java.security.PrivilegedAction oder java.security.PrivilegedExceptionAction übergeben. Die doAs-Methode ordnet das bereitgestellte Subjekt dem aktuellen Zugriffssteuerungskontext zu und ruft dann die Ausführungsmethode über die Aktion auf. Die Implementierung der Ausführungsmethode enthält den gesamten Code, der als angegebenes Subjekt ausgeführt wird. Die Aktion wird als angegebenes Subjekt ausgeführt.

Wenn im J2EE-Programmiermodell (Java 2 Platform, Enterprise Edition) die EJB-Methode über eine Enterprise-Bean oder ein Servlet aufgerufen wird, wird die Methode unter der Benutzeridentität ausgeführt, die mit der RunAs-Einstellung festgelegt ist. Die Spezifikation J2EE 1.4 gibt nicht an, welche Benutzeridentität beim Aufrufen einer Enterprise-Bean von einem Subject.doAs-Aktionsblock im EJB-Code bzw. Servlet-Code verwendet werden soll. Eine logische Erweiterung muss die richtige, im Subjekt angegebene Identität verwenden, wenn die EJB-Methode im Subject.doAs-Aktionsblock aufgerufen wird.

Die Einstellung für die RunAs-Identität von der Aktion Subject.doAs überschreiben zu lassen, ist eine ideal Methode, um das JAAS-Programmiermodell in die J2EE-Laufzeitumgebung zu integrieren. Allerdings löst JAAS ein Problem in Software Development Kit (SDK), Java Technology Edition Version 1.3 und höher aus, wenn JAAS Version 1.0 oder höher in die Java-2-Sicherheitsarchitektur integriert wird. Ein Subjekt, das dem Zugriffssteuerungskontext zugeordnet ist, wird von einem doPrivileged-Aufruf getrennt, wenn der Aufruf von doPrivileged im Subject.doAs-Aktionsblock auftritt. Bis zur Behebung dieses Fehlers gibt es keine zuverlässige und für die Laufzeitumgebung gut funktionierende Methode, das richtige Verhalten der Aktion Subject.doAs in einer J2EE-Laufzeitumgebung zu gewährleisten.

Das Problem kann anhand des folgenden Beispiels besser erläutert werden:

Subject.doAs(subject, new java.security.PrivilegedAction() {
     Public Object run() {
              // Subjekt wird dem aktuellen Thread-Kontext zugeordnet
             java.security.AccessController.doPrivileged( new
                     java.security.PrivilegedAction() {
                         public Object run() {
                         // Subjekt wurde vom aktuellen Thread-Kontext getrennt
return null;
             }
       });
              // Subjekt wird dem aktuellen Thread-Kontext zugeordnet
       return null;
  }
});

Im vorherigen Codebeispiel wird das Objekt des Subjekts dem Kontext des aktuellen Thread zugeordnet. In der Ausführungsmethode eines Aktionsblocks doPrivileged wird das Subject-Objekt aus dem Thread-Kontext entfernt. Nach dem Verlassen des Blocks doPrivileged wird das Subject-Objekt im aktuellen Thread-Kontext wiederhergestellt. Da doPrivileged-Blöcke im Ausführungspfad beliebig platziert und in einer Serverumgebung häufig instrumentiert werden können, wird es schwierig, das Laufzeitverhalten eines doAs-Aktionsblocks zu verwalten.

Zur Behebung dieses Problems stellt WebSphere Application Server eine WSSubject-Helper-Klasse bereit, um die JAAS-Berechtigung, wie oben beschrieben, zu einer J2EE-EJB-Methode zu erweitern. Die WSSubject-Klasse stellt statische doAs- und doAsPrivileged-Methoden bereit, die mit der Subjektklasse identische Signaturen haben. Die Methode WSSubject.doAs ordnet das Subjekt dem derzeit aktiven Thread zu. Die Methoden WSSubject.doAs und WSSubject.doAsPrivileged rufen dann die entsprechenden Methoden Subject.doAs und Subject.doAsPrivileged auf. Die ursprüngliche Berechtigung wird nach dem Verlassen der Methoden WSSubject.doAs und WSSubject.doAsPrivileged wiederhergestellt und dem aktiven Thread zugeordnet.

Die WSSubject-Klasse ersetzt nicht das Subject-Objekt, sondern fungiert als Helper-Klasse, um beim Aufruf einer EJB-Methode ein konsistentes Laufzeitverhalten zu gewährleisten.

Das folgende Beispiel veranschaulicht das Laufzeitverhalten der WSSubject.doAs-Methode:

WSSubject.doAs(subject, new java.security.PrivilegedAction() {
     Public Object run() {
              // Subjekt wird dem aktuellen Thread-Kontext zugeordnet
             java.security.AccessController.doPrivileged( new
                     java.security.PrivilegedAction() {
                      public Object run() {
                         // Subjekt wurde vom aktuellen Thread-Kontext getrennt
return null;
             }
       });
              // Subjekt wird dem aktuellen Thread-Kontext zugeordnet
  return null;
  }
});

Die Methoden Subject.doAs und Subject.doAsPrivileged werden nicht in die J2EE-Laufzeitumgebung integriert. Die im Subject.doAs- und im Subject.doAsPrivileged-Aktionsblock aufgerufenen EJB-Methoden werden unter der Identität, die von der RunAs-Einstellung und nicht von der Identität des Subjekts angegeben werden, ausgeführt.
  • Das Objekt Subject, das von der WSLoginModuleImpl-Instanz und der WSClientLoginModuleImpl-Instanz generiert wird, enthält einen Principal, der die Schnittstelle WSPrincipal implementiert. Wenn Sie die Methode getCredential für ein WSPrincipal-Objekt verwenden, wird ein Objekt zurückgegeben, das die Schnittstelle WSCredential implementiert. Sie finden die WSCredential-Objektinstanz auch in der Liste PublicCredentials der Subject-Instanz. Verwenden Sie für den Abruf des WSCredential-Objekts die Liste PublicCredentials und nicht die Methode getCredential.
  • Die Methode getCallerPrincipal der Klasse WSSubject gibt eine Zeichenfolge zurück, die die Sicherheits-ID des aufrufenden Prozesses angibt. Der Rückgabetyp ist anders als bei der Methode getCallerPrincipal der EJBContext-Schnittstelle java.security.Principal.
  • Das Subject-Objekt, das vom J2C-Modul (Java 2 Connector) DefaultPrincipalMapping generiert wird, enthält einen Ressourcen-Principal und eine Liste PasswordCredentials. Der Ressourcen-Principal stellt die RunAs-Identität dar.
Weitere Informationen finden Sie in der Dokumentation zur J2EE-Connector-Sicherheit.

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rsec_jaasauthor
Dateiname:rsec_jaasauthor.html