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
- Créez le jeton dynamique.
Effectuez l'une des
sous-étapes ci-après.
- 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());
- 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);
- 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
}
- Créez une configuration de connexion JAAS.
- Dans la console d'administration, sélectionnez Sécurité -> Sécurité globale.
- Sous Authentification, sélectionnez Service d'authentification et d'autorisation Java.
- Sélectionnez Connexions de système.
- Créez le générateur avec le module personnalisé préalablement.
- Cliquez sur Nouveau et définissez Alias
= test.generate.ltpa.
- Cliquez sur Nouveau et définissez Module
class name = test.tokens.MyUntCustomLoginModule.
- Sélectionnez Utiliser le proxy de module de connexion .
- Cliquez sur
OK.
- Cliquez sur Nouveau, puis sélectionnez com.ibm.ws.wssecurity.wssapi.token.impl.LTPAGenerateLoginModule.
- Cliquez sur
OK.
- Cliquez sur JAAS - Connexions de système.
- Configurez votre générateur de jetons LTPA pour qu'il utilise la nouvelle configuration JAAS.
- Ouvrez votre configuration de liaisons à modifier.
Dans la console d'administration, sélectionnez WS-Security
> Authentification et protection.
- Sous Jetons d'authentification, sélectionnez le jeton LTPA sortant à modifier.
- Sélectionnez JAAS login = test.generate.ltpa.
- Cliquez sur
Sauvegarder.
- Redémarrez le serveur d'applications pour appliquer les modifications à la configuration JAAS.
- Testez le service.