WebSphere Application
Server prend en charge le modèle de sécurité déclarative Java™, Platform, Enterprise Edition (Java EE). Vous pouvez définir la règle d'authentification et de contrôle d'accès à l'aide du descripteur de déploiement Java EE. Vous pouvez empiler des modules de connexion personnalisés pour personnaliser le mécanisme d'authentification de WebSphere Application Server.
Avant de commencer
Un module de connexion personnalisé peut effectuer un
mappage de principal et de justificatif, assurer le traitement des
justificatifs personnalisés et des jetons de sécurités personnalisés, ainsi que celui des
erreurs. En règle générale, il est inutile d'utiliser le code de l'application pour exécuter la fonction d'authentification. Si vous devez exécuter la fonction d'authentification dans le code de
l'application, utilisez les techniques de programmation décrites dans la
présente section. Utilisez la sécurité déclarative par défaut et les
techniques décrites dans la présente section, en dernier recours.
Pourquoi et quand exécuter cette tâche
Lorsque l'option de connexion unique (SSO) du mécanisme de
connexion LTPA (Lightweight Third-Party Authentication) est activée,
la session de connexion du client Web est suivie par un cookie de
jeton SSO LTPA une fois la connexion établie.
Au moment de la déconnexion, ce jeton est supprimé pour mettre fin à la session de connexion, mais le sujet côté serveur n'est pas supprimé. Lorsque vous utilisez le modèle de sécurité déclarative, le conteneur
Web
WebSphere
Application Server effectue automatiquement l'authentification
client et la gestion de la session de connexion. Vous pouvez effectuer l'authentification dans le code de l'application en définissant une page de connexion sans contrainte de sécurité Java EE et en acheminant d'abord les demandes du client vers la page de connexion. Votre page de connexion peut utiliser le modèle de programmation JAAS (Java Authentication
and Authorization Service) pour effectuer l'authentification.
Pour activer la génération de cookies SSO par les modules de
connexion Web de
WebSphere
Application Server, suivez la procédure ci-dessous.
Procédure
- Créez une configuration JAAS de connexion système. Pour accéder au panneau, cliquez sur Sécurité > Sécurité globale. Dans la section Service d'authentification et d'autorisation Java, cliquez sur Connexions système.
- Clonez manuellement la configuration de connexion WEB_INBOUND et donnez-lui un nouvel alias. Pour cloner la configuration de connexion, cliquez sur Nouveau, entrez le nom de la configuration, cliquez sur Valider, puis sur Modules de connexion JAAS dans la section Propriétés supplémentaires. Cliquez sur Nouveau et configurez le module de connexion JAAS. Pour plus d'informations, voir
Paramètres des modules de connexion pour JAAS (Java Authentication and Authorization Service). Le conteneur Web
WebSphere
Application Server utilise la configuration de la connexion
WEB_INBOUND pour authentifier les clients Web.
La modification de la configuration de la connexion WEB_INBOUND
affecte toutes les applications Web de la cellule. Vous devez créer votre propre configuration de connexion en clonant le contenu de la configuration de connexion WEB_INBOUND.
- Sélectionnez le module de connexion wsMapDefaultInboundLoginModule et cliquez sur Propriétés personnalisées. Il existe deux modules de connexion définis dans votre configuration de connexion : ltpaLoginModule et wsMapDefaultInboundLoginModule.
- Ajoutez le nom d'une propriété de connexion cookie associée à la valeur true.
Ces deux modules de connexion peuvent générés des cookies SSO LTPA. N'ajoutez pas l'option de connexion des cookies à la configuration de connexion WEB_INBOUND d'origine.
- Empilez vos modules de connexion personnalisés personnalisés dans la nouvelle configuration de connexion (facultatif).
- Utilisez votre page de connexion pour les connexions par programmation en réalisant une connexion JAAS LoginContext.login à l'aide de la configuration de connexion nouvellement définie.
A l'issue de la connexion, ltpaLoginModule ou
wsMapDefaultInboundLoginModule génère un cookie SSO LTPA
lorsque l'authentification aboutit. Le module de connexion (LoginModule) qui génère le cookie SSO dépend de nombreux facteurs, notamment de la configuration du mécanisme d'authentification système et des conditions d'exécution
(qui ne sont pas abordées dans cette section).
- Appelez la méthode WSSubject.setRunAsSubject modifiée pour ajouter le sujet à la mémoire cache d'authentification. Le sujet doit correspondre à un sujet JAAS de WebSphere Application
Server créé par LoginModule. L'ajout du sujet à la mémoire cache d'authentification recrée un sujet à partir du jeton SSO.
- Utilisez votre page de déconnexion par programmation pour révoquer les cookies SSO en appelant la méthode revokeSSOCookies depuis la classe WSSecurityHelper.
Le terme "cookies" est utilisé, car WebSphere Application
Server Version 5.1.1 et les versions suivantes prennent en charge un nouveau jeton LTPA SSO avec un algorithme de chiffrement différent qui peut toutefois être configuré pour générer le jeton LTPA SSO initial pour assurer la compatibilité avec les versions antérieures. Le sujet est toujours conservé dans la mémoire cache d'authentification et seuls les cookies SSO sont rejetés.
Fonction obsolète: La méthode revokeSSOCookies(HttpServletRequest,
HttpServletResponse) de la classe WSSecurityHelper est obsolète.
Utilisez la fonctionnalité fournie par la méthode Java Servlet-3.0 logout().
Lisez
Méthodes de sécurité de servlet.
depfeat
Exemple
Utilisez l'exemple de code suivant pour effectuer l'authentification.
Eviter les incidents: Si vous définissez sur
null le mot de passe pour la classe de fabrique WSCallbackHandlerFactoryset afin d'obtenir des gestionnaires,
comme c'est le cas dans l'exemple suivant, vous autorisez la vérification d'identité
sans mot de passe.
gotcha
Suppose you wrote a LoginServlet.java:
Import com.ibm.wsspi.security.auth.callback.WSCallbackHandlerFactory;
Import com.ibm.websphere.security.auth.WSSubject;
public Object login(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
PrintWriter out = null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e){
// Error handling
}
Subject subject = null;
try {
LoginContext lc = new LoginContext("system.Your_login_configuration",
WSCallbackHandlerFactory.getInstance().getCallbackHandler(
userid, null, password, req, res, null));
lc.login();
subject = lc.getSubject();
WSSubject.setRunAsSubject(subject);
} catch(Exception e) {
// catch all possible exceptions if you want or handle them separately
out.println("Exception in LoginContext login + Exception = " +
e.getMessage());
throw new ServletException(e.getMessage());
}
The following is sample code to revoke the SSO cookies upon a programming logout:
The LogoutServlet.java:
public void logout(HttpServletRequest req, HttpServletResponse res,
Object retCreds) throws ServletException {
PrintWriter out =null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e){
// Error Handling
}
try {
WSSecurityHelper.revokeSSOCookies(req, res);
} catch(Exception e) {
// catch all possible exceptions if you want or handle them separately
out.println("JAASLogoutServlet: logout Exception = " + e.getMessage());
throw new ServletException(e);
}
}