Definindo uma configuração de responsável pela chamada de UsernameToken sem interação de registro

Para autenticar um UsernameToken com uma configuração de responsável pela chamada sem acessar o registro do WebSphere, é possível substituir o método de autenticação do consumidor de UsernameToken e configurar o responsável pela chamada para usar uma configuração de login do JAAS alternativa.

Sobre Esta Tarefa

Estas informações somente se aplicam à Java API for XML (JAX-WS).

Por padrão, o consumidor de UsernameToken de Web Services Security do JAX-WS, o UNTConsumeLoginModule, sempre valida o nome de usuário e a senha contidos contidos no token com relação ao registro do WebSphere. É possível usar as SPIs que o GenericSecurityTokenFactory fornece para substituir este método de autenticação por um próprio. Para obter informações adicionais, consulte Substituindo o método de autenticação do consumidor de UsernameToken usando um módulo de login do JAAS empilhado.

Quando uma configuração de responsável pela chamada for incluída nas restrições do Web Services Security para um provedor de serviços, o nome de usuário e a senha contidos no UsernameToken também serão validados com relação ao registro do WebSphere. Se um nome de usuário e uma senha forem fornecidos, ambos serão validados com relação ao registro do WebSphere. Se somente um nome de usuário for fornecido, ele deverá existir no registro do WebSphere. Estas validações ocorrem no módulo com.ibm.ws.security.server.lm.ltpaLoginModule que faz parte da pilha de configuração do Java™ Authentication and Authorization Service (JAAS) ws.caller, conforme é mostrado no exemplo a seguir:

com.ibm.ws.wssecurity.impl.auth.module.PreCallerLoginModule
com.ibm.ws.wssecurity.impl.auth.module.UNTCallerLoginModule
...
com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule
com.ibm.ws.security.server.lm.ltpaLoginModule
com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule

O tempo de execução do WebSphere WS-Security não suporta usar a configuração do JAAS para o responsável pela chamada que não inclui os módulos de login ltpaLoginModule e wsMapDefaultInboundLoginModule.

Para usar um UsernameToken com uma configuração de responsável pela chamada sem acessar o registro do WebSphere, você deve evitar que os módulos UNTConsumeLoginModule e ltpaLoginModule acessem o registro e forneçam módulos alternativos.

Procedimento

  1. Para evitar que o módulo UNTConsumeLoginModule acesse o registro, substitua o método de autenticação do consumidor de UsernameToken. Para obter mais informações, consulte twbs_replace_authmethod_usernametoken.html.
  2. Desenvolva um módulo de login do JAAS que seja empilhado sobre com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule. O exemplo a seguir mostra código de amostra para um módulo de login do 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 {
        //For the sake of readability, this login module does not
        //protect against all NPE's
    
    	String username = null;
    	  
    	// get the caller token
    	SecurityToken callerIdentityToken = (SecurityToken)this._sharedState.get(
    	    com.ibm.wsspi.wssecurity.core.Constants.WSSECURITY_CALLER_IDENTITY);
    
    	// if its a UsernameToken, get the username
    	if (callerIdentityToken instanceof UsernameToken) {
    	  username = ((UsernameToken)callerIdentityToken).getUsername();
    	}
    	if (username == null) {
    	  throw new LoginException("Unable to obtain username");
    	}
    
    	Hashtable customProperties = (Hashtable)_sharedState.get(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY);
    	if (customProperties == null) {
    	  customProperties = new Hashtable();
    	}
    
    	// setting the UNIQUEID makes ltpaLoginModule skip the registry check	  
    		// Default realm is used here, but any trusted realm can be used
       String uid = "defaultWIMFileBasedRealm/" + username;
       customProperties.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uid)
     //implementar o restante dos métodos requeridos pela
     //interface LoginModule
    }
  3. Crie uma nova configuração de login do JAAS.
    1. No console administrativo, acesse Segurança > Segurança Global.
    2. Sob Autenticação, acesse Java Authentication and Authorization Service > Logins no Sistema.
    3. Clique em Novo e, sob Alias, insira test.auth.unt.
    4. Inclua os módulos de login do JAAS. Você deve incluir os módulos de login a seguir na ordem mostrada:
      • com.ibm.ws.wssecurity.impl.auth.module.PreCallerLoginModule
      • com.ibm.ws.wssecurity.impl.auth.module.UNTCallerLoginModule
      • test.tokens.MyAuthLoginModule
        Importante: O nome desse módulo deve corresponder ao módulo de login do JAAS desenvolvido.
      • 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 login:
      1. Sob Módulos de Login do JAAS, clique em Novo.
      2. Sob Nome de Classe do Módulo, insira o nome do módulo de login.
      3. Somente para test.tokens.MyAuthLoginModule, selecione Usar proxy do módulo de login.
      4. Clique OK.
    5. Clique em OK e, em seguida, em Salvar.
  4. Configure o responsável pela chamada para usar a nova configuração de JAAS.
    1. No console administrativo, abra a configuração de ligação que deseja alterar.
    2. Selecione WS-Security > Responsável pela Chamada.
    3. Selecione a configuração do responsável pela chamada que deseja alterar.
    4. Sob Login do JAAS, selecione test.auth.unt.
    5. Clique em OK e, em seguida, em Salvar.
  5. Reinicie o servidor de aplicativos para aplicar as mudanças na configuração do JAAS.
  6. Teste o serviço.

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_config_wssec_caller_no_reg
Nome do arquivo: twbs_config_wssec_caller_no_reg.html