Liberty : API publiques de sécurité

Les API publiques de sécurité dans Liberty permettent d'étendre l'infrastructure de sécurité.

Liberty contient des API publiques que vous pouvez utiliser pour implémenter des fonctions de sécurité. Les API de sécurité publiques dans Liberty constituent un sous-ensemble des API publiques de sécurité du WebSphere Application Server Traditional. Les principales classes sont WSSecurityHelper, WSSubject et RegistryHelper. Ces classes contiennent chacune un sous-ensemble des méthodes disponibles dans les versions traditionnelles de WebSphere Application Server. Il y a également une nouvelle classe, WebSecurityHelper.

Les sections suivantes décrivent ces classes principales. Il existe également d'autres classes telles que UserRegistry, WSCredential, et d'autres classes d'exception.

Toutes les API publiques de sécurité prises en charge par Liberty sont décrites dans la documentation de l'API Java™. La documentation d'API Java pour chaque API Liberty API est disponible dans un fichier .zip distinct des sous-répertoires javadoc du répertoire ${wlp.install.dir}/dev.

WSSecurityHelper
Cette classe contient seulement les méthodes isServerSecurityEnabled() et isGlobalSecurityEnabled(). Ces appels renvoient true si appSecurity-2.0 ou zosSecurity-1.0, entre autres, sont activés. Sinon, les méthodes renvoient false. Ces méthodes sont reprises de la classe WSSecurityHelper du WebSphere Application Server Traditional pour des raisons de compatibilité.
Remarque :
  • Il n'existe pas de cellule dans Liberty ; par conséquent, Liberty ne fait pas la distinction entre la sécurité globale et la sécurité du serveur. Ainsi, les deux méthodes renvoient la même valeur.
  • La méthode revokeSSOCookies(javax.servlet.http.HttpServletRequest req,javax.servlet.http.HttpServletResponse res) n'est pas prise en charge dans Liberty. A la place, vous pouvez utiliser la fonction de déconnexion de servlet 3.0.
  • La méthode getLTPACookieFromSSOToken() a été renommée et déplacée dans une nouvelle classe d'API publique, WebSecurityHelper.
WSSubject
Cette classe fournit des méthodes utilitaires pour l'interrogation et la définition du contexte de l'unité d'exécution de sécurité. Toutes les méthodes du WebSphere Application Server Traditional WSSubject sont prises en charge dans Liberty.
Remarque : La sécurité Java 2 est prise en charge mais n'est pas activée par défaut dans Liberty. Par conséquent, par défaut, les contrôles de sécurité Java 2 dans WSSubject ne sont pas effectués.
RegistryHelper
Cette classe fournit l'accès à l'objet UserRegistry et aux informations sur les domaines de confiance. Dans Liberty, elle contient les sous-ensembles suivants des méthodes du 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
Cette classe contient la méthode getLTPACookieFromSSOToken() renommée, qui a été déplacée depuis WSSecurityHelper :
public static Cookie getSSOCookieFromSSOToken() throws Exception
PasswordUtil
Cette classe fournit des méthodes de codage et de décodage pour protéger les informations sensibles. Pour l'activer en tant qu'API, configurez la fonction passwordUtilities-1.0 dans le fichier server.xml.
Remarque : Cette classe existe également dans le profil complet. Toutefois, le profil liberty ajoute d'autres capacités qui introduisent des fonctions supplémentaires.

Exemples de codes utilisant les API publiques de sécurité

Les exemples ci-dessous illustrent l'utilisation d'API publiques de sécurité dans Liberty en vue du développement de modules de connexion de programmation pour JAAS et d'une action sur le sujet.
Exemple 1 : Créer un sujet et l'utiliser pour l'autorisation
Cet exemple explique comment utiliser WSSecurityHelper, WSSubject et UserRegistry pour développer des modules de connexion de programmation pour JAAS afin de créer un sujet Java, puis effectuer une action et utiliser ce sujet pour toute autorisation requise.
Remarque : Le code ci-dessous utilise WSSecurityHelper pour déterminer si la sécurité est activée avant de procéder à tout traitement de sécurité supplémentaire. Cette vérification est utilisée largement en raison de la nature modulaire de Liberty : si la sécurité n'est pas activée, l'environnement d'exécution de la sécurité n'est pas chargé. WSSecurityHelper est toujours chargée, même si la sécurité n'est pas activée.
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) {
			// record some diagnostic info
			return;
		}
		String userid = "user1";
		String password = "user1password";
		try {
			if (ur.isValidUser(userid)) {
				// create a Subject, authenticating with
				// a userid and password
				CallbackHandler wscbh = new WSCallbackHandlerImpl(userid, password);
				LoginContext ctx;
				ctx = new LoginContext("WSLogin", wscbh);
				ctx.login();
				Subject subject = ctx.getSubject();
				// Perform an action using the Subject for
				// any required authorization
				WSSubject.doAs(subject, action);
			}
		} catch (CustomRegistryException e) {
			// record some diagnostic info
			return;
		} catch (RemoteException e) {
			// record some diagnostic info
			return;
		} catch (LoginException e) {
			// record some diagnostic info
			return;
		}
	}
	...
	private final PrivilegedAction action = new PrivilegedAction() {
		@Override
		public Object run() {
			// do something useful here
			return null;
		}
	};

}
Exemple 2 : Créer un sujet et en faire le sujet courant sur l'unité d'exécution
L'exemple ci-dessous explique comment utiliser WSSecurityHelper et WSSubject pour développer des modules de connexion de programmation JAAS afin de créer un sujet Java, en fait le sujet courant sur l'unité d'exécution, et restaurer le contexte d'unité d'exécution de sécurité d'origine.
Remarque : Le code ci-dessous utilise WSSecurityHelper pour déterminer si la sécurité est activée avant de procéder à tout traitement de sécurité supplémentaire.
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 {
		// create a Subject, authenticating with
		// a userid and password
		ctx = new LoginContext("WSLogin", wscbh);
		ctx.login();
		Subject mySubject = ctx.getSubject();
		Subject oldSubject = null;
		try {
			// Save a ref to the current Subject on the thread
			oldSubject = WSSubject.getRunAsSubject();
			// Make mySubject the current Subject on the thread
			WSSubject.setRunAsSubject(mySubject);
			// Do something useful here. Any authorization
			// required will be performed using mySubject
		} catch (WSSecurityException e) {
			// record some diagnostic info
			return;
		} finally {
			// Put the original Subject back on the thread context
			if (oldSubject != null) {
				try {
					WSSubject.setRunAsSubject(oldSubject);
				} catch (WSSecurityException e) {
					// record some diagnostic info 
				}
			}
		}
	} catch (LoginException e) {
		// record some diagnostic info
		return;
	}
}
Exemple 3 : Obtenir des informations sur le sujet courant sur l'unité d'exécution
L'exemple suivant explique comment utiliser WSSecurityHelper, WSSubject et WSCredential pour obtenir des informations sur le sujet courant sur l'unité d'exécution :
Remarque : Le code ci-dessous utilise WSSecurityHelper pour déterminer si la sécurité est activée avant de procéder à tout traitement de sécurité supplémentaire.
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()) {
	// Get the caller's subject
	Subject callerSubject;
	try {
		callerSubject = WSSubject.getCallerSubject();
	} catch (WSSecurityException e) {
		// record some diagnostic info
		return;
	}
	WSCredential wsCred = null;
	Set<WSCredential> wsCredentials =
		callerSubject.getPublicCredentials(WSCredential.class);
	Iterator<WSCredential> wsCredentialsIterator = wsCredentials.iterator();
	if (wsCredentialsIterator.hasNext()) {
		wsCred = wsCredentialsIterator.next();
		try {
			// Print out the groups
			ArrayList<String> groups = wsCred.getGroupIds();
			for (String group : groups) {
				System.out.println("Group name: " + group);
			}
		} catch (CredentialExpiredException e) {
			// record some diagnostic info
			return;
		} catch (CredentialDestroyedException e) {
			// record some diagnostic info
			return;
		}
	}
}
}

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwlp_sec_apis
Nom du fichier : rwlp_sec_apis.html