Développement d'applications de services Web pour l'utilisation d'un jeton UsernameToken sans interaction avec le registre

Pour authentifier un jeton UsernameToken avec un composant appelant sans accéder au registre WebSphere Application Server, vous pouvez remplacer la méthode d'authentification du consommateur UsernameToken et configurer l'appelant pour qu'il utilise une autre configuration de connexion JAAS (Java™ Authentication and Authorization Service).

Pourquoi et quand exécuter cette tâche

Ces informations ne s'appliquent qu'aux services Web JAX-RPC (Java API for XML-based RPC).

Par défaut, le module de connexion JAAS par défaut utilisé avec le consommateur UsernameToken de sécurité de services Web, UsernameLoginModule, valide toujours le nom d'utilisateur et le mot de passe contenus dans le jeton par rapport au registre WebSphere. Vous pouvez configurer une propriété personnalisée pour contourner cette vérification du registre. Lorsqu'un composant appelant est ajouté à 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. Cette validation a 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) system.DEFAULT, comme illustré dans l'exemple ci-après.

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

L'environnement d'exécution WS-Security de WebSphere Application Server ne prend pas en charge l'utilisation de la configuration JAAS pour le composant appelant qui n'inclut pas ces deux modules de connexion. Toutefois, vous pouvez ajouter vos propres modules de connexion personnalisés à cette pile de configuration JAAS.

Pour utiliser un jeton UsernameToken avec un composant appelant sans accéder au registre WebSphere Application Server, vous devez empêcher les modules UsernameLoginModule et ltpaLoginModule d'accéder au registre.
Remarque : Si un élément UsernameToken est ajouté à une application fournisseur à l'aide de l'assistant d'un développeur d'applications, il ajoute automatiquement un composant appelant pour l'élément UsernameToken. Un composant appelant n'est requis que si vous souhaitez que l'identité de l'élément UsernameToken se trouve sur l'unité d'exécution. Si, pour votre application, il n'est pas nécessaire que l'identité de l'élément UsernameToken se trouve sur l'unité d'exécution, vous n'avez pas besoin du composant appelant et pouvez le supprimer. Le composant appelant est configuré dans les extensions de descripteur de déploiement et n'est accessible qu'avec un développeur d'applications

Consultez la rubrique "Configuration du programme appelant dans les contraintes de sécurité du consommateur" du centre de documentation d' IBM Rational Application Developer.

Procédure

  1. Pour empêcher le module UsernameLoginModule d'accéder au registre, ajoutez la propriété personnalisée com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck à la configuration JAAS du consommateur UsernameToken. Vous pouvez ajouter cette propriété personnalisée de deux manières :
    Eviter les incidents Eviter les incidents: Avec la mise à jour de la configuration JAAS wssecurity.UsernameToken, tous les utilisateurs de cette configuration JAAS sur le serveur d'applications ne vérifient pas le registre. Si vous ne souhaitez pas ce comportement, créez une configuration JAAS ou utilisez la méthode permettant de mettre à jour le destinataire d'UsernameTokengotcha

    Pour ajouter la propriété personnalisée au module com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule de la configuration JAAS wssecurity.UsernameToken :

    1. Cliquez surSécurité > Sécurité globale.
    2. Sous Authentification, cliquez sur Service d'authentification et d'autorisation Java > Connexions système.
    3. Sélectionnez wssecurity.UsernameToken.
    4. Sélectionnez com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.
    5. Ajoutez la propriété personnalisée suivante : com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck=true.
    6. Cliquez sur OK.
    7. Redémarrez le serveur d'applications pour recharger la configuration JAAS mise à jour.

    Pour ajouter la propriété personnalisée au consommateur de jeton de l'application, procédez comme suit :

    1. Cliquez sur Applications > Types d'application > Applications d'entreprise WebSphere > (nomAppFournisseur) > Gestion des modules > (nomModule) > Services Web : Liaisons de sécurité du serveur.
    2. Sous Liaison du destinataire de la demande (récepteur), cliquez sur Editer les valeurs personnalisées > Destinataires de jetons.
    3. Sélectionnez votre consommateur UsernameToken.
    4. Cliquez sur Configuration JAAS > Propriétés > Nouveau.
    5. Ajoutez la propriété personnalisée suivante : com.ibm.wsspi.wssecurity.auth.module.UsernameLoginModule.disableUserRegistryCheck=true.
    6. Cliquez sur OK.
    7. Cliquez sur Sauvegarder.
    8. Relancez l'application.
    Remarque : Si le nom du consommateur UsernameToken ressemble à 'Token_123' et qu'il ne peut pas être sélectionné, le développeur d'applications que vous avez utilisé pour ajouter vos contraintes de sécurité n'a pas réussi à donner un nom à votre consommateur de jeton dans le descripteur de déploiement. Vous avez alors le choix entre les deux options ci-après.
    1. Ajouter la propriété à la configuration JAAS de sécurité, comme décrit à l'étape 1.
    2. Editer les liaisons de descripteur de déploiement dans votre projet d'application à l'aide d'un développeur d'applications.
    Reportez-vous à la rubrique "Configuration des conditions du jeton de sécurité dans les contraintes de sécurité du destinataire", dans le centre de documentation d'IBM Rational Application Developer.
  2. Développez un module de connexion JAAS qui s'empile au-dessus de com.ibm.ws.security.server.lm.ltpaLoginModule. Voici un exemple de code pour le module de connexion 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 {
    	    //A des fins de lisibilité, ce module de connexion ne fournit aucune
    	    //protection contre les NPE
    
    	    String username = null;
    	    char [] password = null;
    	    NameCallback nameCallback = null;
    	    PasswordCallback passwordCallback = null;
    
    	    //Obtenir le nom d'utilisateur et le mot de passe à partir de rappels
    	    //configurés par l'environnement d'exécution ws-security
    	    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");
    	    }
    
    	    //Si vous devez valider le nom d'utilisateur et le mot de passe,
    	    //validez-les ici
    
    	    Hashtable customProperties = (Hashtable)_sharedState.get(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY);
    	    if (customProperties == null) {
    	      customProperties = new Hashtable();
    	     _sharedState.put(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY, customProperties);
    	    }
    
    	   // 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)
    	   // SECURITYNAME sera le nom principal
    	   customproperties.put(AttributeNameConstants.WSCREDENTIAL_SECURITYNAME, username);
    
    	    return true;
    	  }
    
    	public boolean logout() throws LoginException {
    		return false;
    	}
    
    }
  3. Créez une configuration de connexion JAAS.
    1. Dans la console d'administration, sélectionnez Sécurité > Sécurité globale.
    2. Dans Authentification, sélectionnez Service d'authentification et d'autorisation Java > Connexions système.
    3. Cliquez sur Nouveau et, sous Aliases, entrez test.auth.jaxrpcunt.
    4. Ajoutez les modules de connexion JAAS. Vous devez ajouter les modules de connexion suivants dans l'ordre indiqué.
      test.tokens.MyAuthLoginModule
      Remarque : Le nom de ce module doit correspondre au module de connexion JAAS que vous avez développé.
      com.ibm.ws.security.server.lm.ltpaLoginModule
      com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule

      Pour chaque module de connexion :

      1. Sous Module 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. Redémarrez le serveur d'applications pour appliquer les modifications à la configuration JAAS.
  5. Configurez votre composant appelant pour qu'il utilise la nouvelle configuration JAAS. Vous ne pouvez configurer votre partie d'appelant qu'à l'aide d'un développeur d'applications. Consultez la rubrique "Configuration du programme appelant dans les contraintes de sécurité du consommateur" du centre de documentation d' IBM Rational Application Developer.
    • Ajoutez la propriété personnalisée suivante à la partie d'appelant du jeton UsernameToken : com.ibm.wsspi.wssecurity.Caller.assertionLoginConfig=system.test.auth.jaxrpcunt.
    • Sauvegardez le descripteur de déploiement
    • Redéployez l'application sur le serveur
  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_usernametokennoreg
Nom du fichier : twbs_usernametokennoreg.html