Définition d'une configuration d'appelant de jeton UsernameToken sans interaction avec le registre

Pour authentifier un jeton UsernameToken avec une configuration d'appelant sans accéder au registre WebSphere, vous pouvez remplacer la méthode d'authentification du consommateur UsernameToken et configurer l'appelant pour utiliser une autre configuration de connexion JAAS.

Pourquoi et quand exécuter cette tâche

Ces informations ne s'appliquent qu'à l'API Java des services Web XML (JAX-WS).

Par défaut, le consommateur de jeton UsernameToken de sécurité de services Web JAX-WS, le module UNTConsumeLoginModule, valide toujours le nom d'utilisateur et le mot de passe contenus dans le jeton par rapport au registre WebSphere. Vous pouvez utiliser les interfaces SPI fournies par GenericSecurityTokenFactory pour remplacer cette méthode d'authentification par votre méthode. Pour plus d'informations, voir Remplacement de la méthode d'authentification du consommateur de jeton UsernameToken à l'aide d'un module de connexion JAAS empilé.

Lorsqu'une configuration d'appelant est ajoutée à des contraintes de sécurité de services Web pour un fournisseur de services, le nom d'utilisateur et le mot de passe contenus dans le jeton UsernameToken sont également validés par rapport au registre WebSphere. Si un nom d'utilisateur et un mot de passe sont fournis, ils sont tous les deux validés par rapport au registre WebSphere. Si seul un nom d'utilisateur est fourni, celui-ci doit exister dans le registre WebSphere. Ces validations ont lieu dans le module com.ibm.ws.security.server.lm.ltpaLoginModule qui fait partie de la pile de configuration JAAS (Java™ Authentication and Authorization Service), comme illustré dans l'exemple suivant :

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

L'environnement d'exécution de sécurité de services Web WebSphere ne prend pas en charge l'utilisation de la configuration JAAS pour l'appelant qui n'inclut pas les modules de connexion ltpaLoginModule et wsMapDefaultInboundLoginModule.

Pour utiliser un jeton UsernameToken avec une configuration d'appelant sans accéder au registre WebSphere, vous devez empêcher les modules UNTConsumeLoginModule et ltpaLoginModule d'accéder au registre, et fournir d'autres modules.

Procédure

  1. Pour empêcher le module UNTConsumeLoginModule d'accéder au registre, remplacez la méthode d'authentification du consommateur de jeton UsernameToken. Pour plus d'informations, voir twbs_replace_authmethod_usernametoken.html.
  2. Développez un module de connexion JAAS qui s'empile au-dessus de com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule. Voici un exemple de code pour un module de connexion 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 {
        //A des fins de lisibilité, ce module de connexion ne fournit aucune
        //protection contre les NPE
    
    	String username = null;
    	  
    	// Obtenir le jeton d'appelant
    	SecurityToken callerIdentityToken = (SecurityToken)this._sharedState.get(
    	    com.ibm.wsspi.wssecurity.core.Constants.WSSECURITY_CALLER_IDENTITY);
    
    	// S'il s'agit d'un jeton UsernameToken, obtenir le nom d'utilisateur
    	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();
    	}
    
    	// La définition de UNIQUEID permet à ltpaLoginModule de sauter la vérification de registre	  
    		// Le domaine par défaut est utilisé ici, mais tout domaine sécurisé peut être utilisé
       String uid = "defaultWIMFileBasedRealm/" + username;
       customProperties.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uid)
     //Implémentez le reste des méthodes requises par
     // l'interface LoginModule
    }
  3. Créez une configuration de connexion JAAS.
    1. Dans la console d'administration, accédez à Sécurité > Sécurité globale.
    2. Sous Authentification, accédez à Service d'authentification et d'autorisation Java > Connexions au système.
    3. Cliquez sur Nouveau et, sous Alias, entrez test.auth.unt.
    4. Ajoutez les modules de connexion JAAS. Vous devez ajouter les modules de connexion suivants dans l'ordre indiqué.
      • com.ibm.ws.wssecurity.impl.auth.module.PreCallerLoginModule
      • com.ibm.ws.wssecurity.impl.auth.module.UNTCallerLoginModule
      • test.tokens.MyAuthLoginModule
        Important : Le nom de ce module doit correspondre au module de connexion JAAS que vous avez développé.
      • com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule
      • com.ibm.ws.security.server.lm.ltpaLoginModule
      • com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule
      Pour chaque module de connexion :
      1. Sous Modules de connexion JAAS, cliquez sur Nouveau.
      2. Sous Nom de la classe du module, entrez le nom du module de connexion.
      3. Pour test.tokens.MyAuthLoginModule uniquement, sélectionnez Utiliser le proxy de module de connexion.
      4. Cliquez sur OK.
    5. Cliquez sur OK, puis sur Sauvegarder.
  4. Configurez votre appelant pour qu'il utilise la nouvelle configuration JAAS.
    1. Dans la console d'administration, ouvrez la configuration de liaisons à modifier.
    2. Sélectionnez WS-Security > Appelant.
    3. Sélectionnez la configuration d'appelant à modifier.
    4. Sous Connexion JAAS, sélectionnez test.auth.unt.
    5. Cliquez sur OK, puis sur Sauvegarder.
  5. Redémarrez le serveur d'applications pour appliquer les modifications à la configuration JAAS.
  6. Testez le service.

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_config_wssec_caller_no_reg
Nom du fichier : twbs_config_wssec_caller_no_reg.html