Vous pouvez transmettre de manière dynamique un nom d'utilisateur et un mot de
passe au générateur de jetons Kerberos, KRBGenerateLoginModule, si vous utilisez des API WSS.
Toutefois, si vous devez utiliser des ensembles de règles et des liaisons, vous ne
pouvez pas transmettre un nom d'utilisateur et un mot de passe de manière dynamique au
générateur de jetons Kerberos 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. Des jetons Kerberos dynamiques peuvent être créés à l'aide d'ensembles de règles et de liaisons 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 Kerberos lorsqu'il demande le ticket Kerberos.
Pourquoi et quand exécuter cette tâche
GenericSecurityTokenFactory fournit une SPI permettant de créer
un jeton que KRBGenerateLoginModule peut utiliser pour personnaliser
le nom d'utilisateur et le mot de passe utilisés lorsqu'il demande le ticket Kerberos.
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 utilisés par KRBGenerateLoginModule lorsqu'il crée un jeton Kerberos. Vous pouvez parvenir aux mêmes résultats en plaçant le jeton
UsernameToken, créé au cours de cette procédure, sur le contexte de demande du client. Vous ne pouvez créer un jeton Kerberos dynamique
qu'à partir d'un jeton UsernameToken que vous créez. Vous ne pouvez créer de jeton Kerberos dynamique à partir d'un ticket Kerberos. Pour plus d'informations sur la manière de placer le jeton sur le contexte de demande du client, reportez-vous aux constantes suivantes dans le fichier com.ibm.wsspi.wssecurity.core.Constants :
- com.ibm.wsspi.wssecurity.token.tokenHolder
- com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext
Procédure
- Créez un module de connexion JAAS personnalisé.
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;
public class MyKrbCustomLoginModule 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());
}
UsernameToken unt = factory.getSimpleUsernameToken("username", "password".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.krb.
- Cliquez sur Nouveau et définissez Module
class name = test.tokens.MyKrbCustomLoginModule.
- Sélectionnez Utiliser le proxy de module de connexion .
- Cliquez sur
OK.
- Cliquez sur Nouveau et sélectionnez Module class name = com.ibm.ws.wssecurity.wssapi.token.impl.KRBGenerateLoginModule.
- Cliquez sur Nouveau et sélectionnez Module class name = com.ibm.ws.wssecurity.wssapi.token.impl.DKTGenerateLoginModule.
- Cliquez sur
OK.
- Cliquez sur JAAS - Connexions de système.
- Configurez votre générateur de jetons Kerberos 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 Kerberos sortant
à modifier.
- Sélectionnez JAAS login = test.generate.krb.
- Cliquez sur Sauvegarder.
- Redémarrez le serveur d'applications pour appliquer les modifications à la configuration JAAS.
- Testez le service.