API públicas de seguridad

Las API públicas de seguridad proporcionan un modo de ampliar la infraestructura de seguridad.

El perfil Liberty contiene las API públicas que puede utilizar para implementar las funciones de seguridad. Las API de seguridad públicas del perfil Liberty son un subconjunto de las API púbicas de seguridad del perfil completo. Las clases principales son WSSecurityHelper, WSSubject y RegistryHelper. Estas clases contienen un subconjunto de los métodos que están disponibles en las versiones completas del perfil. 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 el perfil Liberty aparecen en la documentación de la API Java™. La documentación de la API Java para cada API de perfil Liberty se detalla en la sección Interfaces de programación (API) del Information Center, y también está disponible como un archivo .zip aparte en uno de los subdirectorios javadoc del directorio ${wlp.install.dir}/dev.

WSSecurityHelper
Esta clase contiene sólo los métodos isServerSecurityEnabled() y isGlobalSecurityEnabled(). Los dos devuelven true si está habilitada cualquiera de estas características en el archivo server.xml:
  • appSecurity-2.0
  • zosSecurity-1.0
De lo contrario, los métodos devuelven false. Estos métodos se llevaron a cabo a través de la clase perfil completo WSSecurityHelper por motivos de compatibilidad.
Nota:
  • No hay células en el perfil Liberty, por lo que no hay ninguna diferencia en el perfil 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 el perfil 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 perfil completo WSSubject se admiten en el perfil Liberty.
Nota: Java 2 Security se admite pero no está habilitado de forma predeterminada en el perfil 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 el perfil Liberty, contiene el siguiente subconjunto de los métodos de perfil completo:
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 getLTPACookieFromSSOToken() throws Exception

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 el perfil 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 del perfil 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

Términos y condiciones para centros de información | Comentarios


Icono de indicación de fecha y hora Última actualización: 15 de junio de 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=rwlp_sec_apis
Nombre de archivo:rwlp_sec_apis.html