Propagación de un objeto serializable Java personalizado para la propagación de atributos de seguridad

Este documento describe cómo añadir un objeto al sujeto desde un módulo de inicio de sesión y describe otras consideraciones sobre infraestructura para garantizar que el objeto Java™ se propague.

Antes de empezar

Antes de realizare esta tarea, verifique que la propagación de seguridad esté habilitada en la consola administrativa.

Acerca de esta tarea

Con la propagación de atributos de seguridad habilitada, puede propagar datos horizontalmente con SSO (Inicio de sesión único) habilitado o en sentido descendente mediante CSIv2 (Common Secure Interoperability Versión 2). Al iniciar sesión, ya sea a través de una configuración de inicio de sesión de la aplicación o de una configuración de inicio de sesión del sistema, se puede conectar un módulo de inicio de sesión personalizado para añadir objetos serializados Java al sujeto durante el inicio de sesión. Este documento describe cómo añadir un objeto al sujeto desde un módulo de inicio de sesión y describe otras consideraciones sobre infraestructura para garantizar que el objeto Java se propague.

Procedimiento

  1. Añada el objeto Java personalizado al sujeto desde un módulo de inicio de sesión personalizado. Existe un proceso de dos fases para cada módulo de inicio de sesión JAAS (Java Authentication and Authorization Service). WebSphere Application Server completa los siguientes procesos para cada módulo de inicio de sesión presente en la configuración:
    método de inicio de sesión
    En este paso, se analizan los devoluciones de llamada de la configuración de inicio de sesión, si es necesario, y se crean los nuevos objetos y credenciales.
    método de compromiso
    En esta paso, los objetos y credenciales que se crean durante el inicio de sesión se añaden al Subject.
    Una vez añadido un objeto Java personalizado al sujeto, WebSphere Application Server serializa el objeto en el servidor emisor, deserializa el objeto en el servidor receptor y vuelve a añadir el objeto al sujeto en sentido descendente. No obstante, existen algunos requisitos para que este proceso se efectúe correctamente. Para obtener más información sobre el modelo de programación JAAS, consulte la información de JAAS proporcionada en el artículo Seguridad: Recursos de aprendizaje.
    [AIX Solaris HP-UX Linux Windows][z/OS]Importante: Siempre que conecte un módulo de inicio de sesión personalizado a la infraestructura de inicio de sesión de WebSphere Application Server, asegúrese de que el código es de confianza. Cuando ponga juntas las clases en un archivo JAR (Java Archive) y añada el archivo al directorio raíz_servidor_apl/lib/ext/, el módulo de inicio de sesión tendrá los permisos AllPermissions de la seguridad de Java 2. Se recomienda que añada el módulo de inicio de sesión y otras clases de infraestructura en cualquier directorio privado. No obstante, debe modificar el archivo raíz_perfil/properties/server.policy para asegurarse de que el directorio privado, el archivo JAR (Java Archive), o ambos tienen los permisos necesarios para ejecutar las API (interfaces de programación de aplicaciones) que se llaman desde el módulo de inicio de sesión. Como es posible que el módulo de inicio de sesión se ejecute después del código de aplicación en la pila de llamadas, puede añadir el código doPrivileged para que no sea necesario añadir las propiedades adicionales a la aplicación.
    [IBM i]Importante: Siempre que conecte un módulo de inicio de sesión personalizado a la infraestructura de inicio de sesión de WebSphere Application Server, asegúrese de que el código es de confianza. Cuando añada el módulo de inicio de sesión al directorio raíz_perfil/classes, el módulo de inicio de sesión tiene los permisos AllPermissions de la seguridad de Java 2. Para obtener más información, consulte Creación de un subdirectorio de clases en el perfil para clases personalizadas. Sin embargo, puesto que el módulo de inicio de sesión se puede ejecutar después del código de aplicación en la pila de llamadas, puede añadir el código doPrivileged para que no tener que añadir propiedades adicionales a las aplicaciones.
    El siguiente ejemplo de código muestra cómo añadir el código doPrivileged. Para obtener información sobre los pasos de inicialización, inicio de sesión y compromiso a seguir, consulte Desarrollo de módulos de inicio de sesión personalizados para una configuración de inicio de sesión del sistema para JAAS
    public customLoginModule() 
    {
    	public void initialize(Subject subject, CallbackHandler callbackHandler, 
         Map sharedState, Map options) 
    	{
    
    	}
    
    	public boolean login() throws LoginException 
    	{
         // Construye la devolución de llamada de WSTokenHolderCallback para que 
         // pueda determinar si
         // se ha propagado el objeto personalizado
    		  		Callback callbacks[] = new Callback[1];
    		  		  callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
        
    		  try
    		  {
    			      			      _callbackHandler.handle(callbacks);
    		  } 
    		  catch (Exception e)
    		  {
    		  		  throw new LoginException (e.getLocalizedMessage());
    		  }
    
    		  		  // Comprueba si alguna información se propaga durante este inicio de sesión
    		  		  List authzTokenList = ((WSTokenHolderCallback) callbacks[1]).
                getTokenHolderList();
    
    		  if (authzTokenList != null)
    		  {
    			     			     for (int i = 0; i< authzTokenList.size(); i++)
                 {
    				        TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);
    
                      //  Busca el objeto personalizado. Asegúrese de que utiliza  
                      //  "startsWith" porque hay algunos datos añadidos 
                      //  al final del nombre, lo que indica a qué Subject  
                      //  Set pertenece. Ejemplo de getName(): 
                      //  "com.acme.CustomObject (1)". El nombre de clase 
                      //  se genera en el extremo emisor llamando al 
                      //  método object.getClass().getName(). Si este objeto 
                      //  está deserializado en WebSphere Application Server,
                      //  devuélvalo y no tendrá que añadirlo aquí.
                      //  De lo contrario, puede añadirlo más abajo.
                      //  Nota:  si la clase aparece en esta lista y  
                      //  no utiliza serialización personalizada (por ejemplo,  
                      //  una implementación de la interfaz de señales descrita 
                      //  en Propagation Token Framework), WebSphere
                      //  Application  Server deserializa automáticamente el  
                      //  objeto Java. Puede volver aquí, si 
                      //  se encuentra en la lista.
    
    				        				        if (tokenHolder.getName().startsWith("com.acme.CustomObject"))
    					     return true;
    			    }
    		  }
           //  Si llega hasta aquí, es que no se ha propagado el objeto personalizado
    		      		      myCustomObject = new com.acme.CustomObject();
    		      		      myCustomObject.put("mykey", "mydata");
    	}
    
    	public boolean commit() throws LoginException 
    	{
    		try 
    		{
           // Asigna una referencia a una variable final para que se pueda utilizar  
           // en el bloque doPrivileged
    						final com.acme.CustomObject myCustomObjectFinal = myCustomObject;
    						// Evita que las aplicaciones necesiten un permiso getPrivateCredential 
           // de Java.
    			java.security.AccessController.doPrivileged(new java.security.
               PrivilegedExceptionAction() 
    			{
    								public Object run() throws java.lang.Exception
    				{
                // Procure no añadir un objeto nulo al Subject ni un objeto  
                // que ya exista.
    										if (myCustomObjectFinal != null && !subject.getPrivateCredentials().
                    contains(myCustomObjectFinal))
    					{
                   // Esta llamada requiere un permiso especial de seguridad de Java 2,
                   // consulte la documentación de la API (interfaz de programación de aplicaciones) 
                   // de JAAS.
    												subject.getPrivateCredentials().add(myCustomObjectFinal);
    					}
    					return null;
    				}
    			});
    		}
    				catch (java.security.PrivilegedActionException e)
    		{
    						// Envuelve la excepción en WSLoginFailedException
    						java.lang.Throwable myException = e.getException();
    						throw new WSLoginFailedException (myException.getMessage(), myException);
    		}
    	}
    
    	// Define las variables del módulo de inicio de sesión
    		com.acme.CustomObject myCustomObject = null;
    }
  2. Verifique que la clase Java personalizada implementa la interfaz java.io.Serializable. Un objeto que se añade al Subject debe estar serializado, si desea que el objeto se propague. Por ejemplo, el objeto debe implementar la interfaz java.io.Serializable. Si el objeto no está serializado, no se produce un error en la solicitud, pero el objeto no se propaga. Para asegurarse de que los objetos añadidos al Subject se propagan, implemente una de las interfaces de símbolos definidas en Propagación de atributos de seguridad o añada los atributos a una de las siguientes implementaciones de señales predeterminadas existentes:
    AuthorizationToken
    Añada los atributos, si son específicos para usuario. Para obtener más información, consulte Utilización de la señal de autorización predeterminada para propagar atributos de seguridad.
    PropagationToken
    Añada los atributos que sean específicos para una invocación. Para obtener más información, consulte Utilización de la señal de propagación predeterminada para propagar atributos de seguridad.

    Si tiene cuidado al añadir los objetos personalizados y sigue los pasos para asegurarse de que WebSphere Application Server pueda serializar y deserializar el objeto en todos los saltos, sólo bastará con utilizar objetos Java personalizados.

  3. Verifique que la clase Java personalizada exista en todos los sistemas que puedan recibir la solicitud.

    [AIX Solaris HP-UX Linux Windows][z/OS]Cuando añada un objeto personalizado al sujeto con la intención de que WebSphere Application Server propague dicho objeto, ponga juntas las definiciones de clases en un archivo JAR (Java Archive) y añada el archivo al directorio raíz_servidor_apl/lib/ext/ en todos los nodos en que pueda realizarse la serialización y deserialización. Además, verifique que las versiones de clase Java sean las mismas.

    [IBM i]Cuando añada un objeto personalizado al sujeto con la intención de que WebSphere Application Server propague dicho objeto, asegúrese de que la definición de clase del objeto personalizado exista en el directorio raíz_perfil/classes en todos los nodos en que pueda realizarse la serialización y deserialización. Además, verifique que las versiones de clase Java sean las mismas.

  4. Verifique que el módulo de inicio de sesión personalizado está configurado en todas las configuraciones de inicio de sesión utilizadas en el entorno en que tiene que añadir el objeto personalizado durante un inicio de sesión. Cualquier configuración de inicio de sesión que interactúe con WebSphere Application Server genera un sujeto que puede propagarse hacia fuera para una solicitud EJB (Enterprise JavaBeans). Si desea que WebSphere Application Server propague un objeto personalizado en todos los casos, asegúrese de que el módulo de inicio de sesión personalizado se añada a cada configuración de inicio de sesión utilizada en el entorno. Para obtener más información, consulte Desarrollo de módulos de inicio de sesión personalizados para una configuración de inicio de sesión del sistema para JAAS.
  5. Verifique que la propagación de atributos de seguridad esté habilitada en todos los servidores en sentido descendente que reciban la información propagada. Cuando se envía una solicitud EJB a un servidor en sentido descendente y la propagación de atributos de seguridad está inhabilitada en dicho servidor, sólo la señal de autenticación se envía para la compatibilidad con versiones anteriores. Por lo tanto, debe revisar la configuración para verificar que la propagación esté habilitada en todas las células que pueden recibir solicitudes. Debe comprobar varios lugares de la consola administrativa para asegurarse de que la propagación está completamente habilitada. Para obtener más información, consulte Propagación de atributos de seguridad entre servidores de aplicaciones.
  6. Añada cualquier objeto personalizado a la lista de exclusión de propagación que no desee que se propague. Puede configurar una propiedad para que excluya la propagación de objetos que coincidan con nombres de clase y/o nombres de paquetes específicos. Por ejemplo, puede tener un objeto personalizado que esté relacionado con un proceso específico. Si el objeto se propaga, no contiene información válida. Debe indicar a WebSphere Application Server que no propague este objeto. Siga estos pasos para especificar el objeto de la lista de exclusión de propagación mediante la consola administrativa:
    1. Pulse Seguridad > Seguridad global > Propiedades personalizadas > Nueva.
    2. Añada com.ibm.ws.security.propagationExcludeList en el campo Nombre.
    3. Añada el nombre del objeto personalizado en el campo Valor. Puede añadir una lista de objetos personalizados a la lista de exclusión de propagación separados por dos puntos (:). Por ejemplo, podría especificar com.acme.CustomLocalObject:com.acme.private.*. Puede especificar un nombre de clase, como por ejemplo com.acme.CustomLocalObject, o bien un nombre de paquete, como por ejemplo com.acme.private.*. En este ejemplo, WebSphere Application Server no propaga ninguna clase que sea igual a com.acme.CustomLocalObject o empiece por com.acme.private.

      Aunque puede añadir objetos personalizados a la lista de exclusión de propagación, tenga en cuenta los efectos colaterales. WebSphere Application Server almacena la señal opaca o el contenido del sujeto serializado en una memoria caché local para la duración de la señal de inicio de sesión único (SSO). La duración de la señal SSO, que tiene un valor por omisión de dos horas, se configura en las propiedades SSO de la consola administrativa. La información que se añada a la señal opaca sólo incluye los objetos que no aparecen en la lista de exclusión.

      Asegúrese de que el valor de tiempo de espera de la señal SSO sea mayor que el valor de tiempo de espera de la memoria caché de autenticación. Para modificar la memoria caché de autenticación, consulte la documentación relacionada con los valores de la memoria caché de autenticación.

Resultados

Como resultado de esta tarea, los objetos serializables Java personalizados se propagan horizontalmente o en sentido descendente. Para obtener más información sobre las diferencias entre la propagación horizontal y la propagación en sentido descendente, consulte Propagación de atributos de seguridad o añada los atributos a una de las siguientes implementaciones de señales predeterminadas existentes.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_propcustjavaser
File name: tsec_propcustjavaser.html