Liberty: API públicas de seguridad

Las API públicas de seguridad en Liberty proporcionan una forma de ampliar la infraestructura de seguridad.

Liberty contiene las API públicas que puede utilizar para implementar las funciones de seguridad. Las API de seguridad públicas de Liberty son un subconjunto de las API públicas de seguridad del WebSphere Application Server tradicional. Las clases principales son WSSecurityHelper, WSSubject y RegistryHelper. Estas clases contienen un subconjunto de los métodos que están disponibles en las versiones de WebSphere Application Server tradicional. También existe una clase WebSecurityHelper nueva.

Las siguientes secciones describen las principales clases. Existen también otras clases como UserRegistry, WSCredential, y otras clases de excepción.

Todas las API públicas de seguridad soportadas por Liberty aparecen en la documentación de la API Java™. La documentación de la API Java para cada API de Liberty está disponible en un archivo .zip separado en uno de los subdirectorios de Javadoc del directorio ${wlp.install.dir}/dev.

WSSecurityHelper
Esta clase contiene sólo los métodos isServerSecurityEnabled() y isGlobalSecurityEnabled(). Estas llamadas devuelven true si se ha habilitado appSecurity-2.0 o zosSecurity-1.0, entre otros. De lo contrario, los métodos devuelven false. Estos métodos se han traspasado desde la clase WSSecurityHelper de WebSphere Application Server tradicional por razones de compatibilidad.
Nota:
  • No hay células en Liberty, por lo que no hay ninguna diferencia en Liberty entre la seguridad global y la seguridad del servidor. Por lo tanto, ambos métodos devuelven el mismo valor.
  • El método revokeSSOCookies(javax.servlet.http.HttpServletRequest req,javax.servlet.http.HttpServletResponse res) no está soportado en Liberty. En su lugar, puede utilizar la Función de fin de sesión del servlet 3.0.
  • El nombre del método getLTPACookieFromSSOToken() se ha cambiado por una nueva clase de API pública: WebSecurityHelper.
WSSubject
Esta clase proporciona métodos de programa de utilidad para consultar y establecer el contexto de la hebra de seguridad. Todos los métodos del WebSphere Application Server tradicional WSSubject están soportados en Liberty.
Nota: Java 2 Security se admite pero no está habilitado de forma predeterminada en Liberty. Por tanto, de forma predeterminada, no se realizan las comprobaciones de seguridad Java 2 en WSSubject.
RegistryHelper
Esta clase proporciona acceso al objeto UserRegistry y a la información de reino de confianza. En Liberty, contiene el siguiente subconjunto de los métodos de WebSphere Application Server tradicional:
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
Esta clase contiene el método getLTPACookieFromSSOToken() con nuevo nombre, que se ha movido desde WSSecurityHelper:
public static Cookie getSSOCookieFromSSOToken() throws Exception
PasswordUtil
Esta clase proporciona métodos de codificación y descodificación para proteger información confidencial. Para habilitar esta como una API, configure la característica passwordUtilities-1.0 en el archivo server.xml.
Nota: Esta clase también existe en el perfil completo. Sin embargo, el perfil de Liberty añade más prestaciones que presentan métodos adicionales.

Ejemplos de código de la API pública de seguridad

Los siguientes ejemplos muestran cómo utilizar las API públicas de seguridad en Liberty para realizar un inicio de sesión programado y operar en el sujeto.
Ejemplo 1: crear un sujeto y utilizarlo para autorización
Este ejemplo muestra cómo utilizar WSSecurityHelper, WSSubject y UserRegistry para realizar un inicio de sesión mediante programación para crear un sujeto Java y, a continuación, ejecutar una acción y utilizar ese sujeto para la autorización que sea necesaria.
Nota: El código siguiente utiliza WSSecurityHelper para comprobar si la seguridad está habilitada antes de continuar con el proceso de seguridad. Esta comprobación se utiliza ampliamente, debido a la naturaleza modular de Liberty: si la seguridad no está habilitada, el tiempo de ejecución de seguridad no se carga. WSSecurityHelper siempre se carga, incluso si la seguridad no está habilitada.
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;
		}
	};

}
Ejemplo 2: crear un sujeto y convertirlo en el sujeto actual de la hebra
El siguiente ejemplo muestra cómo utilizar WSSecurityHelper y WSSubject para realizar un inicio de sesión programado para crear un sujeto Java, convertirlo en el sujeto actual de la hebra y, finalmente, restaurar el contexto de la hebra de seguridad original.
Nota: El código siguiente utiliza WSSecurityHelper para comprobar si la seguridad está habilitada antes de continuar con el proceso de seguridad.
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;
	}
}
Ejemplo 3: obtener información del sujeto actual en la hebra
El siguiente ejemplo muestra cómo utilizar WSSecurityHelper, WSSubject y WSCredential para obtener información sobre el sujeto actual en la hebra.
Nota: El código siguiente utiliza WSSecurityHelper para comprobar si la seguridad está habilitada antes de continuar con el proceso de seguridad.
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;
		}
	}
}
}

Icono que indica el tipo de tema Tema de referencia



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwlp_sec_apis
Nombre de archivo:rwlp_sec_apis.html