Desarrollo de aplicaciones de servicios web para utilizar una UsernameToken sin interacción del registro

Para autenticar una señal UsernameToken con una parte de interlocutor sin acceder al registro de WebSphere Application Server, puede sustituir el método de autenticación del consumidor UsernameToken y configurar el interlocutor para que utilice una configuración de inicio de sesión JAAS (Java™ Authentication and Authorization Service) alternativa.

Acerca de esta tarea

Esta información se aplica sólo a los servicios web JAX-RPC (Java API for XML-based RPC).

De forma predeterminada, el módulo de inicio de sesión JAAS predeterminado que se utiliza con el consumidor UsernameToken de seguridad de servicios web, UsernameLoginModule, siempre valida el nombre de usuario y la contraseña que se encuentran dentro de la señal en el registro de WebSphere. Puede configurar una propiedad personalizada para omitir esta comprobación de registro. Cuando se añade un componente de interlocutor a las restricciones de WS-Security para un proveedor de servicios, el nombre de usuario y la contraseña que se encuentran en UsernameToken también se validan en el registro de WebSphere. Esta validación se produce en el módulo com.ibm.ws.security.server.lm.ltpaLoginModule que forma parte de la pila de configuración de JAAS (Java Authentication and Authorization Service) system.DEFAULT, tal como se muestra en el ejemplo siguiente.

com.ibm.ws.security.server.lm.ltpaLoginModulecom.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule

El tiempo de ejecución de seguridad de servicios Web de WebSphere Application Server no admite el uso de una configuración de JAAS para el componente interlocutor que no incluya estos dos módulos de inicio de sesión. Sin embargo, puede añadir sus propios módulos de inicio de sesión personalizados a esta pila de configuración de JAAS.

Para utilizar una UsernameToken con un componente de interlocutor sin acceder al registro de WebSphere Application Server, debe impedir que los módulos UsernameLoginModule y ltpaLoginModule accedan al registro.
Nota: Cuando se añade una UsernameToken a una aplicación de proveedor utilizando el asistente en un desarrollador de aplicaciones, añade automáticamente un componente de interlocutor para la UsernameToken. Un componente de interlocutor sólo es necesario si desea que la identidad de la UsernameToken esté en la hebra de ejecución. Si la aplicación no necesita que la identidad de la UsernameToken esté en la hebra de ejecución, el componente de interlocutor no es necesario y puede eliminarlo. El componente de interlocutor se configura en las extensiones de descriptor de despliegue y sólo puede accederse a él con un desarrollador de aplicaciones.

Consulte el tema "Configuración del interlocutor en las restricciones de seguridad del consumidor" en el Information Center de Rational Application Developer.

Procedimiento

  1. Para evitar que el módulo UsernameLoginModule acceda al registro, añada la propiedad personalizada com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck a la configuración de JAAS para el consumidor de UsernameToken. Puede añadir esta propiedad personalizada de una de estas dos maneras:
    Avoid trouble Avoid trouble: La actualización de la configuración de JAAS wssecurity.UsernameToken hace que todos los usuarios de esta configuración de JAAS del servidor de aplicaciones no comprueben el registro. Si no desea este comportamiento, cree una nueva configuración de JAAS o utilice el método para actualizar el consumidor de UsernameToken. gotcha

    Para añadir la propiedad personalizada al módulo com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule de la configuración de JAAS wssecurity.UsernameToken:

    1. Pulse Seguridad > Seguridad global.
    2. En Autenticación, pulse Java Authentication and Authorization Service > Inicios de sesión del sistema.
    3. Seleccione wssecurity.UsernameToken.
    4. Seleccione com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.
    5. Añada la propiedad personalizada siguiente: com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck=true.
    6. Pulse Aceptar.
    7. Reinicie el servidor de aplicaciones para volver a cargar la configuración de JAAS actualizada.

    Para añadir la propiedad personalizada al consumidor de señal de la aplicación, realice los pasos siguientes:

    1. Pulse Aplicaciones > Tipos de aplicación > Aplicaciones de empresa de WebSphere > (nombreProveedorAplicaciones) > Gestionar módulos > (nombreMódulo) > Servicios Web: Enlaces de seguridad del servidor.
    2. En el enlace Consumidor (receptor) de solicitudes, pulse Editar personalizado > Consumidores de señal.
    3. Seleccione el consumidor de UsernameToken.
    4. Pulse Configuración de JAAS > Propiedades > Nueva.
    5. Añada la propiedad personalizada siguiente: com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck=true.
    6. Pulse Aceptar.
    7. Pulse Guardar.
    8. Reinicie la aplicación.
    Nota: Si el nombre del consumidor de UsernameToken se parece a 'Token_123' y no es seleccionable, el desarrollador de aplicaciones que ha utilizado para añadir las restricciones de seguridad no ha podido dar un nombre al consumidor de señal en el descriptor de despliegue. Como alternativa, puede realizar una de las dos acciones siguientes.
    1. Añadir la propiedad a la configuración JAAS de seguridad tal como se describe en el paso 1.
    2. Editar los enlaces de descriptor de despliegue del proyecto de aplicación utilizando un desarrollador de aplicaciones.
    Consulte el tema "Configuración del requisito de señal de seguridad en las restricciones de seguridad del consumidor" en el Information Center de Rational Application Developer.
  2. Desarrolle un módulo de inicio de sesión de JAAS que se apile sobre com.ibm.ws.security.server.lm.ltpaLoginModule. El ejemplo siguiente muestra código de ejemplo para el módulo de inicio de sesión de JAAS:
    package test.tokens;
    import java.util.Map;
    import java.util.Hashtable;
    
    import javax.security.auth.Subject;
    import javax.security.auth.login.LoginException;
    import javax.security.auth.spi.LoginModule;
    import javax.security.auth.callback.NameCallback;
    import javax.security.auth.callback.PasswordCallback;
    import javax.security.auth.callback.Callback;
    import javax.security.auth.callback.CallbackHandler;
    import com.ibm.wsspi.wssecurity.auth.token.UsernameToken;
    import com.ibm.wsspi.security.token.AttributeNameConstants;
    
    public class MyAuthLoginModule implements LoginModule {
    
    	  	  private Map _sharedState = null;
    	  	  private CallbackHandler _callbackHandler = null;
    	  	  Subject _subject = null;
    
    
    	public void initialize(Subject subject, CallbackHandler callbackHandler,
                  Map<String, ?> sharedState, Map<String, ?> options) {
    	    this._sharedState = sharedState;
    	    	    this._callbackHandler = callbackHandler;
    	    	    this._subject = subject;		
    	}
    
    	public boolean login() throws LoginException {
    	    //Para facilitar la comprensión, este módulo de inicio de sesión no
    	    //protege contra todos los NPE
    
    	    	String username = null;
    	    	    char [] password = null;
    	    	    NameCallback nameCallback = null;
    	    	    PasswordCallback passwordCallback = null;
    
    	         //Obtener el nombre de usuario y la contraseña de las devoluciones de llamada que
    	    	    //el tiempo de ejecución de seguridad de servicios Web ha configurado
    	    	    Callback[] callbacks = new Callback[2];
    	    	    callbacks[0] = nameCallback = new NameCallback("Username: ");
    	    	    callbacks[1] = passwordCallback = new PasswordCallback("Password: ", false);
    	             try {
    	      			      _callbackHandler.handle(callbacks);
    	    } catch(Exception e) {
    	      	      throw new LoginException("Unable to process callbacks");
    	    }
    
    	    	    if (nameCallback != null) {
    	      username = nameCallback.getName();
    	    }
    
    	    	    if (passwordCallback != null) {
    	      char tmp[] = passwordCallback.getPassword();
    	      	      if (tmp != null && tmp.length != 0) {
    	        	        password = new char[tmp.length];
    	        	        System.arraycopy(tmp, 0, password, 0, tmp.length);
    	      }
    	    }
    
    	    	if (username == null) {
    	  throw new LoginException("No se ha podido obtener el nombre de usuario");
    	    }
    
    	         //Si va a validar el nombre de usuario y la contraseña,
    	    	    //hágalo aquí
    
    	    	Hashtable customProperties = (Hashtable)_sharedState.get(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY);
    	    if (customProperties == null) {
    	      	  customProperties = new Hashtable();
    	     	     _sharedState.put(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY, customProperties);
    	    }
    
    	    // Aquí se utiliza el reino predeterminado, pero puede utilizarse cualquier reino de confianza
    	   String uid = "defaultWIMFileBasedRealm/" + username;
    	   customProperties.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uid)
    	   	// SECURITYNAME will be the principal name
    	   	   customproperties.put(AttributeNameConstants.WSCREDENTIAL_SECURITYNAME, username);
    
    	    return true;
    	  }
    
    	public boolean logout() throws LoginException {
    		return false;
    	}
    
    }
  3. Crear una configuración de inicio de sesión JAAS.
    1. En la consola administrativa, seleccione Seguridad > Seguridad global.
    2. En Autenticación, seleccione Java Authentication and Authorization Service > Inicios de sesión del sistema.
    3. Pulse Nuevo y, en Alias, especifique test.auth.jaxrpcunt.
    4. Añada los módulos de inicio de sesión JAAS. Debe añadir los módulos de inicio de sesión siguientes en el orden mostrado:
      test.tokens.MyAuthLoginModule
      Nota: El nombre de este módulo debe coincidir con el módulo de inicio de sesión JAAS que ha desarrollado.
      com.ibm.ws.security.server.lm.ltpaLoginModulecom.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule

      Para cada módulo de inicio de sesión:

      1. En Módulos de inicio de sesión de JAAS, pulse Nuevo.
      2. En Nombre de clase de módulo, especifique el nombre del módulo de inicio de sesión.
      3. Sólo para test.tokens.MyAuthLoginModule, seleccione Utilizar proxy de módulo de inicio de sesión.
      4. Pulse Aceptar.
      5. Pulse Aceptar, luego Guardar.
  4. Reinicie el servidor de aplicaciones para aplicar los cambios de configuración JAAS.
  5. Configure el componente de interlocutor para utilizar la nueva configuración de JAAS. Puede configurar el componente de interlocutor utilizando sólo un desarrollador de aplicaciones. Consulte el tema "Configuración del interlocutor en las restricciones de seguridad del consumidor" en el Information Center de Rational Application Developer.
    • Añada la propiedad personalizada siguiente al componente de interlocutor de UsernameToken: com.ibm.wsspi.wssecurity.Caller.assertionLoginConfig=system.test.auth.jaxrpcunt.
    • Guarde el descriptor de despliegue.
    • Vuelva a desplegar la aplicación en el servidor.
  6. Pruebe el servicio.

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=twbs_usernametokennoreg
File name: twbs_usernametokennoreg.html