API publiques de sécurité

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

Le profil Liberty contient des API publiques que vous pouvez utiliser pour implémenter des fonctions de sécurité. Les API de sécurité publiques dans le profil Liberty constituent un sous-ensemble des API publiques de sécurité du profil complet. Les principales classes sont WSSecurityHelper, WSSubject et RegistryHelper. Ces classes contiennent chacune un sous-ensemble des méthodes disponibles dans leur classe homologue du profil complet. 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 le profil Liberty sont décrites dans la documentation de l'API Java™. La documentation d'API Java pour chaque API de profil Liberty est détaillée dans la section Interfaces de programmation (API) du centre de documentation et est également disponible dans un fichier .zip distinct dans l'un des sous-répertoires javadoc du répertoire ${wlp.install.dir}/dev.

WSSecurityHelper
Cette classe contient seulement les méthodes isServerSecurityEnabled() et isGlobalSecurityEnabled(). Toutes les deux renvoient true si l'une des fonctions suivantes est activée dans le fichier server.xml :
  • appSecurity-2.0
  • zosSecurity-1.0
Sinon, les méthodes renvoient false. Ces méthodes sont reprises de la classe WSSecurityHelper du profil complet pour des raisons de compatibilité.
Remarque :
  • Il n'existe pas de cellule dans le profil Liberty ; par conséquent, le profil 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 le profil 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 profil complet WSSubject sont prises en charge dans le profil Liberty.
Remarque : La sécurité Java 2 est prise en charge mais n'est pas activée par défaut dans le profil 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 superdomaines (realms) de confiance. Dans le profil Liberty, elle contient les sous-ensembles suivants des méthodes du profil complet ::
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 getLTPACookieFromSSOToken() throws Exception

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

Les exemples ci-dessous illustrent l'utilisation d'API publiques de sécurité dans le profil 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 du profil 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) {
			// enregistrer des infos de diagnostic
			return;
		}
		String userid = "user1";
		String password = "user1password";
		try {
			if (ur.isValidUser(userid)) {
				// créer un sujet, authentifié avec
				// un ID utilisateur et un mot de passe
				CallbackHandler wscbh = new WSCallbackHandlerImpl(userid, password);
				LoginContext ctx;
				ctx = new LoginContext("WSLogin", wscbh);
				ctx.login();
				Subject subject = ctx.getSubject();
				// Exécuter une action en utilisant le sujet pour
				// toute autorisation requise
				WSSubject.doAs(subject, action);
			}
		} catch (CustomRegistryException e) {
			// enregistrer des infos de diagnostic
			return;
		} catch (RemoteException e) {
			// enregistrer des infos de diagnostic
			return;
		} catch (LoginException e) {
			// enregistrer des infos de diagnostic
			return;
		}
	}
	...
	private final PrivilegedAction action = new PrivilegedAction() {
		@Override
		public Object run() {
			// faire quelque chose d'utile ici
			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 {
		// créer un sujet, authentifié avec
		// un ID utilisateur et un mot de passe
		ctx = new LoginContext("WSLogin", wscbh);
		ctx.login();
		Subject mySubject = ctx.getSubject();
		Subject oldSubject = null;
		try {
			// Enregistrer une référence au sujet courant sur l'unité d'exécution
			oldSubject = WSSubject.getRunAsSubject();
			// Faire de mySubject le sujet courant sur l'unité d'exécution
			WSSubject.setRunAsSubject(mySubject);
			// Faire quelque chose d'utile ici. Toute autorisation requise
			// sera contrôlée d'après les informations de mySubject
		} catch (WSSecurityException e) {
			// enregistrer des infos de diagnostic
			return;
		} finally {
			// Replacer le sujet original dans le contexte de l'unité d'exécution
			if (oldSubject != null) {
				try {
					WSSubject.setRunAsSubject(oldSubject);
				} catch (WSSecurityException e) {
					// enregistrer des infos de diagnostic 
				}
			}
		}
	} catch (LoginException e) {
		// enregistrer des infos de diagnostic
		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()) {
	// Obtenir le sujet de l'appelant
	Subject callerSubject;
	try {
		callerSubject = WSSubject.getCallerSubject();
	} catch (WSSecurityException e) {
		// enregistrer des infos de diagnostic
		return;
	}
	WSCredential wsCred = null;
	Set<WSCredential> wsCredentials =
		callerSubject.getPublicCredentials(WSCredential.class);
	Iterator<WSCredential> wsCredentialsIterator = wsCredentials.iterator();
	if (wsCredentialsIterator.hasNext()) {
		wsCred = wsCredentialsIterator.next();
		try {
			// Imprimer la liste des groupes
			ArrayList<String> groups = wsCred.getGroupIds();
			for (String group : groups) {
				System.out.println("Nom du groupe : " + group);
			}
		} catch (CredentialExpiredException e) {
			// enregistrer des infos de diagnostic
			return;
		} catch (CredentialDestroyedException e) {
			// enregistrer des infos de diagnostic
			return;
		}
	}
}
}

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

Dispositions pour les centres de documentation | Commentaires


Icône d'horodatage Dernière mise à jour: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=rwlp_sec_apis
Nom du fichier : rwlp_sec_apis.html