Ejemplo: módulo de inicio de sesión de señal de autenticación

En este ejemplo se muestra cómo determinar si el inicio de sesión es inicial o de propagación.

Para obtener información sobre los pasos de inicialización, inicio de sesión y confirmación 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) 
	{
		_sharedState = sharedState;
	}

	public boolean login() throws LoginException 
	{
		// Maneja WSTokenHolderCallback para ver si se trata de una 
     // conexión inicial o de propagación.
				Callback callbacks[] = new Callback[1];
				  callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
	        
		try
		{
			callbackHandler.handle(callbacks);
		} 
		catch (Exception e)
		{
			// Maneja la excepción
		} 
            
				// Recibe los objetos ArrayList de TokenHolder (las señales serializadas)
				List authzTokenList = ((WSTokenHolderCallback) callbacks[0]).getTokenHolderList();
        
		if (authzTokenList != null)
		{
			// Se itera en la lista buscando la señal personalizada
			for (int i=0; i<authzTokenList.size(); i++)
			{
				TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);

          // Busca el nombre y la versión de la implementación de AuthenticationToken
          // personalizada
								if (tokenHolder.getName().equals("your_oid_name") && tokenHolder.getVersion() == 1)
				{
            // Pasa los bytes en el constructor de AuthenticationToken personalizado
            // que se ha de deserializar
					customAuthzToken = new 									
						com.ibm.websphere.security.token.
               customAuthenticationTokenImpl(tokenHolder.getBytes());

				}
			}
		}
		else 
          // Esta no es una conexión de propagación. Crea una instancia nueva de la implementación 
          // de AuthenticationToken
		{
        // Obtiene el principal de AuthenticationToken predeterminado. Este principal
        //  debe coincidir con todos las señales predeterminadas.
        // Nota: Durante la ejecución WebSphere Application Server sólo lo aplica a
        //  las señales predeterminadas. De este modo, puede optar por hacerlo para  
        // las señales personalizadas aunque no es necesario.
			defaultAuthToken = (com.ibm.wsspi.security.token.AuthenticationToken) 
								sharedState.get(com.ibm.wsspi.security.auth.callback.Constants.WSAUTHTOKEN_KEY);
			String principal = defaultAuthToken.getPrincipal();

       // Añade una señal de autenticación personalizado nuevo. Se trata de una conexión inicial. Pasa
       // el principal en el constructor 
						customAuthToken = new com.ibm.websphere.security.token.
          CustomAuthenticationTokenImpl(principal);

			// Añade los atributos iniciales
						if (customAuthToken != null)
			{
								customAuthToken.addAttribute("key1", "value1");
								customAuthToken.addAttribute("key1", "value2");
								customAuthToken.addAttribute("key2", "value1");
								customAuthToken.addAttribute("key3", "something different");
			}
		}

     // Nota: Puede añadir la señal al asunto durante la confirmación por si
     // sucede algo durante la conexión.
	}

	public boolean commit() throws LoginException 
	{
					if (customAuthToken != null)
		{
						// Establece la señal customAuthToken en el asunto
			try
			{
								private final AuthenticationToken customAuthTokenPriv = customAuthToken;
          // Realícelo en un bloque de código doPrivileged para que el código de aplicación
          // no necesite añadir permisos adicionales
				java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() 
				{
					public Object run() 
					{
						try
						{
                  // Añade la señal de autenticación personalizado si no es
                  //  nulo y aún no está en el asunto
                          												if ((customAuthTokenPriv != null) && 			
																		(!subject.getPrivateCredentials().
                        contains(customAuthTokenPriv)))
							{
																subject.getPrivateCredentials().add(customAuthTokenPriv);
							}
						} 
						catch (Exception e)
						{
							throw new WSLoginFailedException (e.getMessage(), e);
						}

						return null;
					}
				});
			}
			catch (Exception e)
			{
				throw new WSLoginFailedException (e.getMessage(), e);
			}
		}
	}

	// Define las variables del módulo de inicio de sesión
		com.ibm.wsspi.security.token.AuthenticationToken customAuthToken = null;
	com.ibm.wsspi.security.token.AuthenticationToken defaultAuthToken = null;
	java.util.Map _sharedState = null;
}

Icon that indicates the type of topic Reference topic



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