Configuración de un interlocutor de UsernameToken sin interacción de registro

Para autenticar una UsernameToken con una configuración de interlocutor sin acceder al registro de WebSphere, puede sustituir el método de autenticación del consumidor de UsernameToken y configurar el interlocutor para que utilice una configuración de inicio de sesión JAAS alternativa.

Acerca de esta tarea

Esta información sólo se aplica a JAX-WS (API de JAVA para servicios web XML).

De forma predeterminada, el consumidor de UsernameToken de JAX-WS Web Services Security, UNTConsumeLoginModule, siempre valida el nombre de usuario y la contraseña contenidos en la señal con el registro de WebSphere. Puede utilizar las SPI que proporciona GenericSecurityTokenFactory para sustituir este método de autenticación con uno propio. Para obtener más información, consulte el tema Sustitución del método de autenticación del consumidor de UsernameToken utilizando un módulo de inicio de sesión JAAS apilado.

Cuando se añade una configuración de interlocutor a las restricciones de WS-Security para un proveedor de servicios, el nombre de usuario y la contraseña contenidos en la UsernameToken también se validan con el registro de WebSphere. Si se proporcionan un nombre de usuario y una contraseña, ambos se validan con el registro de WebSphere. Si sólo se proporciona el nombre de usuario, este nombre de usuario debe existir en el registro de WebSphere. Estas validaciones se producen en el módulo com.ibm.ws.security.server.lm.ltpaLoginModule como parte de la pila de configuración de Java™ Authentication and Authorization Service (JAAS) de wss.caller, tal como se muestra en el ejemplo siguiente:

com.ibm.ws.wssecurity.impl.auth.module.PreCallerLoginModulecom.ibm.ws.wssecurity.impl.auth.module.UNTCallerLoginModule...
com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModulecom.ibm.ws.security.server.lm.ltpaLoginModulecom.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule

El tiempo de ejecución de WS-Security de WebSphere no soporta el uso de la configuración JAAS para el interlocutor que no incluye los módulos de inicio de sesión ltpaLoginModule y wsMapDefaultInboundLoginModule.

Para utilizar una señal UsernameToken con una configuración de interlocutor sin acceder al registro de WebSphere, debe impedir que los módulos UNTConsumeLoginModule y ltpaLoginModule accedan al registro y proporcionar módulos alternativos.

Procedimiento

  1. Para evitar que el módulo UNTConsumeLoginModule acceda al registro, sustituya el método de autenticación del consumidor de UsernameToken. Para obtener más información, consulte el apartado twbs_replace_authmethod_usernametoken.html.
  2. Desarrolle un módulo de inicio de sesión JAAS que se apile en com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule. El siguiente ejemplo muestra un código de ejemplo para un módulo de inicio de sesión JAAS:
    package test.tokens;
    
    import java.util.Map;
    import java.util.Hashtable;
    
    import javax.security.auth.Subject;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.login.LoginException;
    import javax.security.auth.spi.LoginModule;
    import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
    import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
    import com.ibm.wsspi.security.token.AttributeNameConstants;
    
    public class MyAuthLoginModule implements LoginModule {
    
      private Map<String, ?> _sharedState;
    
      public void initialize(Subject subject, CallbackHandler callbackHandler,
                             Map<String, ?> sharedState, Map<String, ?> options) {
    
        this._sharedState = sharedState;
      }
    
      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;
    	  
    		// obtener una señal de interlocutor
    		SecurityToken callerIdentityToken = (SecurityToken)this._sharedState.get(
    	    	    com.ibm.wsspi.wssecurity.core.Constants.WSSECURITY_CALLER_IDENTITY);
    	// si es una UsernameToken, obtener el nombre de usuario
    		if (callerIdentityToken instanceof UsernameToken) {
    	  	  username = ((UsernameToken)callerIdentityToken).getUsername();
    	}
    		if (username == null) {
    	  throw new LoginException("No se ha podido obtener el nombre de usuario");
    	}
    
    		Hashtable customProperties = (Hashtable)_sharedState.get(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY);
    	if (customProperties == null) {
    	  	  customProperties = new Hashtable();
    	}
    
    		// Si establece UNIQUEID hace que ltpaLoginModule se salte la comprobación del registro
    		 // Aquí se utiliza el reino predeterminado, pero puede utilizarse cualquier reino de confianza
       String uid = "defaultWIMFileBasedRealm/" + username;
       customProperties.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uid)
     //implemente el resto de métodos requeridos por la
     //interfaz de módulo de inicio de sesión
    }
  3. Cree una nueva configuración de inicio de sesión JAAS.
    1. En la consola administrativa, vaya a Seguridad > Seguridad global.
    2. En autenticación, vaya a Java Authentication and Authorization Service > Inicios de sesión en el sistema.
    3. Pulse Nuevo y en Alias especifique test.auth.unt.
    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:
      • com.ibm.ws.wssecurity.impl.auth.module.PreCallerLoginModule
      • com.ibm.ws.wssecurity.impl.auth.module.UNTCallerLoginModule
      • test.tokens.MyAuthLoginModule
        Importante: El nombre de este módulo debe coincidir con el módulo de inicio de sesión JAAS que ha desarrollado.
      • com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule
      • com.ibm.ws.security.server.lm.ltpaLoginModule
      • com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule
      Para cada módulo de inicio de sesión:
      1. En módulos de inicio de sesión JAAS, pulse Nuevo.
      2. En el nombre de clase del módulo, especifique el nombre del módulo de inicio de sesión.
      3. Sólo para test.tokens.MyAuthLoginModule, seleccione Utilizar el proxy de módulo de inicio de sesión.
      4. Pulse Aceptar.
    5. Pulse Aceptar, luego Guardar.
  4. Configure su interlocutor para que utilice una configuración JAAS nueva.
    1. En la consola administrativa, abra la configuración de enlaces que desea cambiar.
    2. Seleccione WS-Security > Interlocutor.
    3. Seleccione la configuración de interlocutor que desea cambiar.
    4. En inicio de sesión JAAS, seleccione test.auth.unt.
    5. Pulse Aceptar, luego Guardar.
  5. Reinicie el servidor de aplicaciones para aplicar los cambios de configuración JAAS.
  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_config_wssec_caller_no_reg
File name: twbs_config_wssec_caller_no_reg.html