Liberty:Öffentliche Sicherheits-APIs

Die öffentlichen Sicherheits-APIs in Liberty ermöglichen die Erweiterung der Sicherheitsinfrastruktur.

Liberty enthält öffentliche APIs, die Sie zum Implementieren der Sicherheitsfunktionen verwenden können. Die öffentlichen Sicherheits-APIs in Liberty sind eine Untergruppe der öffentlichen Sicherheits-APIs von WebSphere Application Server Traditional. Die Hauptklassen sind WSSecurityHelper, WSSubject und RegistryHelper. Diese Klassen enthalten einen Teil der Methoden, die in den Versionen von WebSphere Application Server Traditional verfügbar sind. Außerdem gibt es eine neue Klasse mit dem Namen WebSecurityHelper.

Diese Hauptklassen sind in den folgenden Abschnitten beschrieben. Darüber hinaus gibt es noch weitere Klassen wie UserRegistry und WSCredential sowie weitere Ausnahmeklassen.

Alle von Liberty unterstützten öffentlichen Sicherheits-APIs sind in der Java™-API-Dokumentation beschrieben. Die Java-API-Dokumentation für jede Liberty-API ist in einer separaten ZIP-Datei (.zip) in einem der Javadoc-Unterverzeichnisse des Verzeichnisses ${wlp.install.dir}/dev verfügbar.

WSSecurityHelper
Diese Klasse enthält nur die Methoden isServerSecurityEnabled() und isGlobalSecurityEnabled(). Diese Aufrufe geben true zurück, wenn unter anderem appSecurity-2.0 oder zosSecurity-1.0 aktiviert ist. Andernfalls geben die Methoden den Wert false zurück. Diese Methoden werden aus Kompatibilitätsgründen aus der Klasse WSSecurityHelper von WebSphere Application Server Traditional übernommen.
Anmerkung:
  • Da keine Zellen in Liberty vorhanden sind, wird in Liberty nicht zwischen globaler Sicherheit und Serversicherheit unterschieden. Daher geben beide Methoden denselben Wert zurück.
  • Die Methode revokeSSOCookies(javax.servlet.http.HttpServletRequest req,javax.servlet.http.HttpServletResponse res) wird in Liberty nicht unterstützt. Sie können stattdessen die Servlet 3.0-Abmeldefunktion verwenden.
  • Die Methode getLTPACookieFromSSOToken() wurde in die neue öffentliche API-Klasse WebSecurityHelper umbenannt.
WSSubject
Diese Klasse enthält Dienstprogrammmethoden für die Abfrage und das Festlegen des Sicherheitsthreadkontexts. Alle Methoden von WSSubject in WebSphere Application Server Traditional werden in Liberty unterstützt.
Anmerkung: Die Java-2-Sicherheit wird in Liberty unterstützt, ist aber nicht standardmäßig aktiviert. Daher werden die Java-2-Sicherheitsprüfungen in WSSubject standardmäßig nicht ausgeführt.
RegistryHelper
Diese Klasse ermöglicht den Zugriff auf das UserRegistry-Objekt und auf Informationen zu vertrauenswürdigen Realms. In Liberty enthält diese Klasse die folgende Untergruppe der Methoden von WebSphere Application Server Traditional:
public static UserRegistry getUserRegistry(String realmName) throws WSSecurityException
public static List<String> getInboundTrustedRealms(String realmName) throws WSSecurityException
public static boolean isRealmInboundTrusted(String inboundRealm, String localRealm)
WebSecurityHelper
Diese Klasse enthält die umbenannte Methode getLTPACookieFromSSOToken(), die aus WSSecurityHelper verschoben wurde:
public static Cookie getSSOCookieFromSSOToken() throws Exception
PasswordUtil
Diese Klasse stellt Codierungs- und Decodierungsmethoden für den Schutz sensibler Daten bereit. Zum Aktivieren dieser Klasse als API konfigurieren Sie das Feature passwordUtilities-1.0 in der Datei server.xml.
Anmerkung: Diese Klasse ist auch in Full Profile enthalten. In Liberty Profile werden weitere Funktionen hinzugefügt, die weitere Methoden einführen.

Codebeispiele für die öffentliche Sicherheits-API

Die folgenden Beispiele veranschaulichen, wie die öffentlichen Sicherheits-APIs in Liberty für eine programmgesteuerte Anmeldung und die Bearbeitung des Subject-Objekts verwendet werden.
Beispiel 1: Subject-Objekt erstellen und für Berechtigung verwenden
Dieses Beispiel veranschaulicht, wie WSSecurityHelper, WSSubject und UserRegistry für eine programmgesteuerte Anmeldung verwendet werden, um ein Java-Subject-Objekt zu erstellen und dann eine Aktion mit diesem Subject-Objekt für jede erforderliche Berechtigung durchzuführen.
Anmerkung: Der folgende Code verwendet WSSecurityHelper, um zu prüfen, ob die Sicherheit aktiviert ist, bevor eine weitere Sicherheitsverarbeitung durchgeführt wird. Diese Prüfung wird wegen der modularen Struktur von Liberty häufig verwendet. Wenn die Sicherheit nicht aktiviert ist, wird die Sicherheitslaufzeit nicht geladen. WSSecurityHelper wird immer geladen, auch wenn die Sicherheit nicht aktiviert ist.
import java.rmi.RemoteException;
import java.security.PrivilegedAction;

import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import com.ibm.websphere.security.CustomRegistryException;
import com.ibm.websphere.security.UserRegistry;
import com.ibm.websphere.security.WSSecurityException;
import com.ibm.websphere.security.WSSecurityHelper;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;
import com.ibm.wsspi.security.registry.RegistryHelper;
public class myServlet {

	...
	if (WSSecurityHelper.isServerSecurityEnabled()) {
				UserRegistry ur = null;
		try  {
						ur = RegistryHelper.getUserRegistry(null);
				} catch (WSSecurityException e1) {
						// Diagnosinformationen aufzeichnen
			return;
		}
				String userid = "user1";
				String password = "user1password";
		try  {
						if (ur.isValidUser(userid)) {
								// Subjekt erstellen, mit Benutzer-ID
								// und Kennwort authentifizieren
								CallbackHandler wscbh = new WSCallbackHandlerImpl(userid, password);
								LoginContext ctx;
								ctx = new LoginContext("WSLogin", wscbh);
						ctx.login();
								Subject subject = ctx.getSubject();
								// Aktion mit dem Subjekt ausführen,
								// das für erforderliche Berechtigungen verwendet wird
								WSSubject.doAs(subject, action);
			}
		} catch (CustomRegistryException e) {
						// Diagnosinformationen aufzeichnen
			return;
		} catch (RemoteException e) {
						// Diagnosinformationen aufzeichnen
			return;
				} catch (LoginException e) {
						// Diagnosinformationen aufzeichnen
			return;
		}
	}
	...
		private final PrivilegedAction action = new PrivilegedAction() {
		@Override
				public Object run() {
						// Nützliche Aktionen ausführen
			return null;
		}
	};

}
Beispiel 2: Subject-Objekt erstellen und als aktuelles Subject-Objekt im Thread festlegen
Das folgende Beispiel veranschaulicht, wie WSSecurityHelper und WSSubject für eine programmgesteuerte Anmeldung verwendet werden, um ein Java-Subjekt zu erstellen, das Subjekt als aktuelles Subjekt im Thread festzulegen und dann den Kontext des ursprünglichen Sicherheitsthreads wiederherzustellen.
Anmerkung: Der folgende Code verwendet WSSecurityHelper, um zu prüfen, ob die Sicherheit aktiviert ist, bevor eine weitere Sicherheitsverarbeitung durchgeführt wird.
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import com.ibm.websphere.security.WSSecurityException;
import com.ibm.websphere.security.WSSecurityHelper;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;
...
if (WSSecurityHelper.isServerSecurityEnabled()) {
		CallbackHandler wscbh = new WSCallbackHandlerImpl("user1", "user1password");
					LoginContext ctx;
	try  {
						// Subjekt erstellen, mit Benutzer-ID
						// und Kennwort authentifizieren
						ctx = new LoginContext("WSLogin", wscbh);
				ctx.login();
				Subject mySubject = ctx.getSubject();
				Subject oldSubject = null;
		try  {
						// Referenz auf das aktuelle Subjekt im Thread speichern
						oldSubject = WSSubject.getRunAsSubject();
						// mySubject als aktuelles Subjekt im Thread festlegen
						WSSubject.setRunAsSubject(mySubject);
						// Nützliche Aktionen ausführen. Alle erforderlichen Berechtigungen
						// werden mit "mySubject" durchgeführt
				} catch (WSSecurityException e) {
						// Diagnosinformationen aufzeichnen
			return;
		} finally {
						// Ursprüngliches Subjekt wieder in den Threadkontext zurückgeben
						if (oldSubject != null) {
				try  {
										WSSubject.setRunAsSubject(oldSubject);
						} catch (WSSecurityException e) {
								// Diagnosinformationen aufzeichnen
				}
			}
		}
			} catch (LoginException e) {
					// Diagnosinformationen aufzeichnen
		return;
	}
}
Beispiel 3: Informationen zum aktuellen Subject-Objekt im Thread abrufen
Das folgende Beispiel veranschaulicht, wie WSSecurityHelper, WSSubject und WSCredential verwendet werden, um Informationen zum aktuellen Subjekt im Thread abzurufen.
Anmerkung: Der folgende Code verwendet WSSecurityHelper, um zu prüfen, ob die Sicherheit aktiviert ist, bevor eine weitere Sicherheitsverarbeitung durchgeführt wird.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;

import javax.security.auth.Subject;
import javax.security.auth.login.CredentialExpiredException;

import com.ibm.websphere.security.WSSecurityException;
import com.ibm.websphere.security.WSSecurityHelper;
import com.ibm.websphere.security.auth.CredentialDestroyedException;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.cred.WSCredential;
...
if (WSSecurityHelper.isServerSecurityEnabled()) {
		// Caller-Subjekt abrufen
		Subject callerSubject;
	try  {
				callerSubject = WSSubject.getCallerSubject();
			} catch (WSSecurityException e) {
					// Diagnosinformationen aufzeichnen
		return;
	}
		WSCredential wsCred = null;
		Set<WSCredential> wsCredentials =
				callerSubject.getPublicCredentials(WSCredential.class);
		Iterator<WSCredential> wsCredentialsIterator = wsCredentials.iterator();
		if (wsCredentialsIterator.hasNext()) {
				wsCred = wsCredentialsIterator.next();
		try  {
						// Gruppen ausgeben
						ArrayList<String> groups = wsCred.getGroupIds();
						for (String group : groups) {
								System.out.println("Group name: " + group);
			}
				} catch (CredentialExpiredException e) {
						// Diagnosinformationen aufzeichnen
			return;
				} catch (CredentialDestroyedException e) {
						// Diagnosinformationen aufzeichnen
			return;
		}
	}
}
}

Symbol das den Typ des Artikels anzeigt. Referenzartikel



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