Génération d'un jeton LTPA dynamique à l'aide d'un module de connexion JAAS empilé

Vous pouvez transmettre de manière dynamique un nom d'utilisateur et un mot de passe au générateur de jetons LTPA, LTPAGenerateLoginModule, si vous utilisez des SPI WSS. Toutefois, si vous devez utiliser des ensembles de règles et des liaisons, vous ne pouvez pas effectuer cela dans une configuration standard car le gestionnaire de rappel et le nom d'utilisateur et le mot de passe du gestionnaire de rappel sont des valeurs fixes. Vous pouvez utiliser des ensembles de règles et des liaisons pour créer des jetons Kerberos dynamiques si un module de connexion JAAS personnalisé est utilisé.

Avant de commencer

Si vous créez un module de connexion JAAS personnalisé ou ajoutez un jeton UsernameToken au contexte de demande du client, vous pouvez personnaliser le nom d'utilisateur et le mot de passe utilisés par le générateur de jetons LTPA lorsqu'il crée un jeton LTPA. Vous pouvez également personnaliser le jeton en définissant directement les octets de jeton utilisés par le générateur de jetons LTPA. La définition des octets de jeton est utile lorsqu'un développeur d'applications souhaite écrire un code permettant d'extraire le jeton LTPA de l'en-tête HTTP d'une demande entrante et le placer dans l'en-tête de sécurité d'un message SOAP sortant.

Pourquoi et quand exécuter cette tâche

GenericSecurityTokenFactory fournit des SPI permettant de créer un jeton que le module LTPAGenerateLoginModule peut utiliser pour personnaliser le jeton LTPA généré par ce module. Ces SPI vous permettent d'utiliser des noms d'utilisateur et mots de passe dynamiques ou de définir directement les octets de jeton, des fonctionnalités non fournies par le gestionnaire de rappel.

La procédure ci-après montre comment utiliser la méthode du module de connexion JAAS empilé pour personnaliser le nom d'utilisateur et le mot de passe ou les octets de jeton. Une fois que vous avez effectué cette procédure, vous pouvez également placer le jeton nouvellement créé sur le contexte de demande du client. Pour plus d'informations sur la manière de placer un jeton sur le contexte de demande du client, reportez-vous aux constantes suivantes dans la documentation Java de com.ibm.wsspi.wssecurity.core.Constants :

  • com.ibm.wsspi.wssecurity.token.tokenHolder
  • com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext

Procédure

  1. Créez le jeton dynamique.

    Effectuez l'une des sous-étapes ci-après.

    1. Pour personnaliser le nom d'utilisateur et le mot de passe, créez un jeton UsernameToken simple.
      import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
      import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
      ...
      GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance();
      UsernameToken myUnt = gstFactory.getSimpleUsernameToken("myUsername", "myPassword".toCharArray());
    2. Pour personnaliser les octets de jeton, créez un jeton BinarySecurityToken simple
      import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
      import com.ibm.websphere.wssecurity.wssapi.token.BinarySecurityToken;
      import com.ibm.websphere.wssecurity.wssapi.WSSUtilFactory;
      ...
      GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance();
      WSSUtilFactory utilFactory = WSSUtilFactory.getInstance();
      
      //callbackHandler est obtenu de la méthode initialize du module de connexion
      Map reqHeaders = utilFactory.getHTTPRequestHeaders(callbackHandler);
      
      //getLtpaHeaderBytes est une méthode que vous écrivez pour rechercher l'en-tête qui contient 
      //le jeton LTPA dans la liste des en-têtes, puis renvoyer les 
      //octets codés de l'en-tête.
      String encodedBytes = getLtpaHeaderBytes(reqHeaders); 
      
      byte [] decodedBytes = utilFactory.decode(encodedBytes);
      
      BinarySecurityToken bst = factory.getSimpleBinarySecurityToken(com.ibm.websphere.wssecurity.wssapi.token.LTPAv2Token, decodedBytes);
  2. Créez un module de connexion JAAS.
    package test.tokens;
    
    import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
    import java.util.Map;
    
    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.BinarySecurityToken;
    
    
    public class MyUntCustomLoginModule implements LoginModule {
      //A des fins de lisibilité, ce module de connexion ne fournit aucune
      //protection contre les NPE
    
      private Map _sharedState;
      private Map _options;
      private CallbackHandler _handler;
    
      public void initialize(Subject subject, CallbackHandler callbackHandler,
                  Map<String, ?> sharedState, Map<String, ?> options) {
    
        this._handler = callbackHandler;
        this._sharedState = sharedState;
        this._options = options;  
      }
    
      public boolean login() throws LoginException {
    
        GenericSecurityTokenFactory factory = null;
        try {
          factory = GenericSecurityTokenFactory.getInstance();
        } catch (Exception e) {
          throw new LoginException(e.toString());
        }
    
        //Le code permettant de créer le jeton BinarySecurityToken peut être utilisé
        //ici à la place du jeton UsernameToken simple
        UsernameToken unt = factory.getSimpleUsernameToken("myUsername", "myPassword".toCharArray());
    
        factory.putGeneratorTokenToSharedState(this._sharedState, unt);
    
        return true;
      }
      //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, sélectionnez Sécurité -> Sécurité globale.
    2. Sous Authentification, sélectionnez Service d'authentification et d'autorisation Java.
    3. Sélectionnez Connexions de système.
    4. Créez le générateur avec le module personnalisé préalablement.
      1. Cliquez sur Nouveau et définissez Alias = test.generate.ltpa.
      2. Cliquez sur Nouveau et définissez Module class name = test.tokens.MyUntCustomLoginModule.
      3. Sélectionnez Utiliser le proxy de module de connexion .
      4. Cliquez sur OK.
      5. Cliquez sur Nouveau, puis sélectionnez com.ibm.ws.wssecurity.wssapi.token.impl.LTPAGenerateLoginModule.
      6. Cliquez sur OK.
      7. Cliquez sur JAAS - Connexions de système.
  4. Configurez votre générateur de jetons LTPA pour qu'il utilise la nouvelle configuration JAAS.
    1. Ouvrez votre configuration de liaisons à modifier.

      Dans la console d'administration, sélectionnez WS-Security > Authentification et protection.

    2. Sous Jetons d'authentification, sélectionnez le jeton LTPA sortant à modifier.
    3. Sélectionnez JAAS login = test.generate.ltpa.
    4. Cliquez 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_create_dynamicltpatoken
Nom du fichier : twbs_create_dynamicltpatoken.html