Desenvolvendo aplicativos de serviços da web para usar um UsernameToken sem interação de registro

Para autenticar um UsernameToken com função de responsável pela chamada sem acessar o registro do WebSphere Application Server, é 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 Java™ Authentication and Authorization Service (JAAS) alternativa.

Sobre Esta Tarefa

Essas informações são aplicáveis somente para serviços da web Java API for XML-based RPC (JAX-RPC).

Por padrão, o módulo de login do JAAS padrão, usado com o consumidor de UsernameToken de Segurança de Serviços da web, UsernameLoginModule, sempre valida junto ao registro do WebSphere o nome do usuário e a senha que estão contidos no token. É possível configurar uma propriedade customizada para evitar essa verificação de registro. Quando uma função de responsável pela chamada é incluída nas restrições de WS-Security para um provedor de serviços, o nome de usuário e a senha contidos no UsernameToken também são validados junto ao registro do WebSphere. Essa validação ocorre 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) system.DEFAULT, conforme mostrado no exemplo a seguir.

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

O tempo de execução do WS-Security do WebSphere Application Server não suporta o uso da configuração de JAAS para a função de responsável pela chamada que não inclui esses dois módulos de login. No entanto, é possível incluir seus próprios módulos de login customizados nessa pilha de configuração do JAAS.

Para usar um UsernameToken com uma função de responsável pela chamada sem acessar o registro do WebSphere Application Server, deve-se evitar que os módulos UsernameLoginModule e ltpaLoginModule acessem o registro.
Nota: Quando um UsernameToken é incluído em um aplicativo de provedor usando o assistente de um desenvolvedor de aplicativos, ele automaticamente inclui uma função de responsável pela chamada para o UsernameToken. A função de responsável pela chamada só é necessária se você desejar que a identidade do UsernameToken esteja no encadeamento de execução. Se o aplicativo não exigir que a identidade do UsernameToken esteja no encadeamento de execução, a função de responsável pela chamada não é necessária e pode ser removida. A função de responsável pela chamada é configurada nas extensões do descritor de implementação e só pode ser acessada com um desenvolvedor de aplicativos

Consulte o tópico "Configurando o responsável pela chamada em restrições de segurança do consumidor" no centro de informações do IBM Rational Application Developer.

Procedimento

  1. Para evitar que o módulo UsernameLoginModule acesse o registro, inclua a propriedade customizada com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck na configuração do JAAS do consumidor UsernameToken. Há duas maneiras de incluir essa propriedade customizada:
    Evitar Problemas Evitar Problemas: A atualização da configuração do JAAS de wssecurity.UsernameToken faz com que todos os usuários dessa configuração do JAAS no servidor de aplicativos não verifiquem o registro. Caso não deseje esse comportamento, crie uma nova configuração do JAAS ou use o método para atualizar o consumidor UsernameTokengotcha

    Para incluir a propriedade customizada no módulo com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule na configuração do JAAS de wssecurity.UsernameToken:

    1. Clique em Segurança > Segurança Global.
    2. Em Autenticação, clique em Java Authentication and Authorization Service > Logins do Sistema.
    3. Selecione wssecurity.UsernameToken.
    4. Selecione com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.
    5. Inclua a seguinte propriedade customizada: com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck=true.
    6. Clique OK.
    7. Reinicie o servidor de aplicativos para recarregar a configuração do JAAS atualizada.

    Para incluir a propriedade customizada no consumidor de token do aplicativo, execute as seguintes etapas:

    1. Clique em Aplicativos > Tipos de Aplicativos > WebSphere Enterprise Applications > (providerAppName) > Gerenciar Módulos > (moduleName) > Serviços da Web: Ligações de Segurança do Servidor.
    2. Em Ligação do Consumidor de Solicitações (Receptor), clique em Editar Customização > Consumidores de Token.
    3. Selecione seu consumidor de UsernameToken.
    4. Clique em Configuração do JAAS > Propriedades > Novo.
    5. Inclua a seguinte propriedade customizada: com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck=true.
    6. Clique OK.
    7. Clique em Salvar.
    8. Inicie novamente o aplicativo.
    Nota: Caso seu nome de consumidor de UsernameToken seja semelhante a 'Token_123' e não possa ser selecionado, o desenvolvedor de aplicativos usado para incluir suas restrições de segurança falhou ao fornecer um nome para o consumidor de tokens no descritor implementação. Como alternativa, é possível executar uma das duas opções a seguir.
    1. Inclua a propriedade na configuração do JAAS de segurança, conforme descrito na etapa 1.
    2. Edite as ligações do descritor de implementação em seu projeto do aplicativo, usando um desenvolvedor de aplicativos.
    Consulte o tópico "Configurando o requisito do token de segurança nas restrições de segurança do consumidor" no centro de informações do IBM Rational Application Developer.
  2. Desenvolva um módulo de login do JAAS que seja empilhado acima de com.ibm.ws.security.server.lm.ltpaLoginModule. O exemplo a seguir mostra um código de amostra para o 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.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 {
    	    //For the sake of readability, this login module does not
    	    //protect against all NPE's
    
    	    String username = null;
    	    char [] password = null;
    	    NameCallback nameCallback = null;
    	    PasswordCallback passwordCallback = null;
    
    	    //Get the username and password from callbacks that
    	    //the ws-security runtime set up
    	    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("Unable to obtain username");
    	    }
    
    	    //If you will be validating the username and password,
    	    //validate it here
    
    	    Hashtable customProperties = (Hashtable)_sharedState.get(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY);
    	    if (customProperties == null) {
    	      customProperties = new Hashtable();
    	     _sharedState.put(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY, customProperties);
    	    }
    
    	   // Default realm is used here, but any trusted realm can be used
    	   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. Crie uma configuração de login do JAAS.
    1. No console administrativo, selecione Segurança > Segurança Global.
    2. Em Autenticação, selecione Java Authentication and Authorization Service > Logins do Sistema.
    3. Clique em Novo e, em Alias, insira test.auth.jaxrpcunt.
    4. Inclua os módulos de login do JAAS. Você deve incluir os módulos de login a seguir na ordem mostrada:
      test.tokens.MyAuthLoginModule
      Nota: O nome desse módulo deve corresponder ao módulo de login do JAAS desenvolvido.
      com.ibm.ws.security.server.lm.ltpaLoginModule
      com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule

      Para cada módulo de login:

      1. Em Módulos de Login do JAAS, clique em Novo.
      2. Em Nome de Classe do Módulo, insira o nome do módulo de login.
      3. Apenas 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. Reinicie o servidor de aplicativos para aplicar as mudanças na configuração do JAAS.
  5. Configura a função do responsável pela chamada para usar a nova configuração de JAAS. É possível configurar a função do responsável pela chamada usando apenas um desenvolvedor de aplicativos. Consulte o tópico "Configurando o responsável pela chamada em restrições de segurança do consumidor" no centro de informações do IBM Rational Application Developer.
    • Inclua a seguinte propriedade customizada na função do responsável pela chamada para o UsernameToken: com.ibm.wsspi.wssecurity.Caller.assertionLoginConfig=system.test.auth.jaxrpcunt.
    • Salve o descritor de implementação
    • Reimplemente o aplicativo no servidor
  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_usernametokennoreg
Nome do arquivo: twbs_usernametokennoreg.html