Lire en anglais

Partager via


Sécuriser les applications WebSphere Liberty/Open Liberty avec Microsoft Entra ID en utilisant OpenID Connect

Cet article montre comment sécuriser les applications IBM WebSphere Liberty/Open Liberty avec Microsoft Entra ID en utilisant OpenID Connect (OIDC).

Dans cet article, vous apprendrez comment :

  • Configurer un fournisseur OIDC avec Microsoft Entra ID.
  • Protéger une application WebSphere Liberty/Open Liberty en utilisant OIDC.
  • Exécuter et tester l’application WebSphere Liberty/Open Liberty.

Prérequis

Configurer un fournisseur OIDC avec Microsoft Entra ID

OpenID Connect est un protocole d’authentification standard bien pris en charge par Microsoft Entra ID. Dans cette section, vous configurez un fournisseur OIDC avec Microsoft Entra ID pour l’utiliser avec votre application WebSphere Liberty/Open Liberty. Dans une section ultérieure, vous configurez l’application WebSphere Liberty/Open Liberty en utilisant OIDC pour authentifier et autoriser les utilisateurs dans votre tenant Microsoft Entra.

Créer des utilisateurs dans le locataire Microsoft Entra

Tout d’abord, créez deux utilisateurs dans votre locataire Microsoft Entra en suivant les étapes de la section Comment créer, inviter et supprimer des utilisateurs. Vous n’avez besoin que de la section Créer un nouvel utilisateur. Utilisez les instructions suivantes au fur et à mesure que vous parcourez l’article, puis revenez à cet article après avoir créé des utilisateurs dans votre locataire Microsoft Entra.

Pour créer un utilisateur qui servira d’« administrateur » dans l’application, utilisez les étapes suivantes :

  1. Lorsque vous atteignez l’onglet Informations de base dans la section Créer un nouvel utilisateur, utilisez les étapes suivantes :
    1. Pour Nom principal de l’utilisateur, entrez admin. Enregistrez la valeur pour pouvoir l’utiliser plus tard lors de la connexion à l’application.

    2. Pour Surnom de messagerie, sélectionnez Déduire du nom principal de l’utilisateur

    3. Pour Nom d’affichage, saisissez Admin.

    4. Pour Mot de passe, sélectionnez Générer automatiquement le mot de passe. Copiez et enregistrez la valeur du Mot de passe pour l’utiliser plus tard lors de la connexion à l’application.

    5. Sélectionnez Compte activé.

      Capture d’écran du portail Azure montrant le volet Informations de base de création d’un nouvel utilisateur pour un administrateur.

    6. Sélectionnez Vérifier + créer>Créer. Attendez que l’utilisateur soit créé.

    7. Patientez une minute ou deux et sélectionnez Actualiser. Vous devriez voir le nouvel utilisateur dans la liste.

Pour créer un utilisateur qui servira d’« utilisateur » dans l’application, répétez ces étapes, mais utilisez les valeurs suivantes :

  • Pour Nom principal de l’utilisateur, saisissez user.
  • Pour Nom d’affichage, saisissez User.

Capture d’écran du portail Azure montrant le volet Informations de base de création d’un nouvel utilisateur pour un utilisateur régulier.

Enregistrer une application dans Microsoft Entra ID

Ensuite, enregistrez une application en suivant les étapes de la section Démarrage rapide : Enregistrer une application avec la plateforme d’identité Microsoft. Utilisez les instructions suivantes au fur et à mesure que vous parcourez l’article, puis revenez à cet article après avoir enregistré et configuré l’application.

  1. Lorsque vous atteignez la section Enregistrer une application, utilisez les étapes suivantes :
    1. Pour Types de comptes pris en charge, sélectionnez Comptes dans ce répertoire organisationnel uniquement (Répertoire par défaut uniquement : Locataire unique).
    2. Lorsque l’enregistrement est terminé, enregistrez les valeurs de ID d’application (client) et ID de répertoire (tenant) pour les utiliser plus tard dans la configuration de l’application.
  2. Lorsque vous atteignez la section Ajouter une URI de redirection, ignorez les étapes pour l’instant. Vous ajouterez l’URI de redirection plus tard lorsque vous exécuterez et testerez l’application exemple localement dans cet article.
  3. Lorsque vous atteignez la section Ajouter des informations d’identification, sélectionnez l’onglet Ajouter un secret client.
  4. Lorsque vous ajoutez un secret client, notez la valeur du Secret client pour l’utiliser plus tard dans la configuration de l’application.

Ajouter des rôles d’application à votre application

Ensuite, ajoutez des rôles d’application à votre application en suivant les étapes de la section Ajouter des rôles d’application à votre application et les recevoir dans le jeton. Vous n’avez besoin que des sections Déclarer des rôles pour une application et Attribuer des utilisateurs et des groupes aux rôles Microsoft Entra. Utilisez les instructions suivantes au fur et à mesure que vous parcourez l’article, puis revenez à cet article après avoir déclaré des rôles pour l’application.

  1. Lorsque vous atteignez la section Déclarer des rôles pour une application, utilisez l’interface Rôles d’application pour créer des rôles pour l’administrateur et l’utilisateur régulier.

    1. Créez un rôle utilisateur administrateur en utilisant les valeurs suivantes :

      • Pour Nom d’affichage, saisissez Admin.
      • Pour Types de membres autorisés, sélectionnez Utilisateurs/Groupes.
      • Dans le champ Valeur, entrez admin.
      • Pour Description, saisissez Admin.
      • Sélectionnez Voulez-vous activer ce rôle d’application ?.

      Capture d’écran du portail Azure montrant le volet Créer un rôle d’application pour l’utilisateur administrateur.

    2. Sélectionnez Appliquer. Attendez que le rôle soit créé.

    3. Créer un rôle utilisateur régulier en utilisant les mêmes étapes, mais avec les valeurs suivantes :

      • Pour Nom d’affichage, saisissez User.
      • Pour Valeur, saisissez user.
      • Pour Description, saisissez User.

      Capture d’écran du portail Azure montrant le volet de création de rôle d’application pour l’utilisateur régulier.

  2. Lorsque vous atteignez la section Attribuer des utilisateurs et des groupes aux rôles Microsoft Entra, utilisez la procédure suivante :

    1. Sélectionner Ajouter un utilisateur/groupe.

    2. Dans le volet Ajouter une affectation, pour Utilisateurs, sélectionnez l’utilisateur Admin et pour Sélectionner un rôle, sélectionnez le rôle Admin. Ensuite, sélectionnez Attribuer. Attendez que l’attribution de l’application réussisse. Vous devrez peut-être faire défiler le tableau latéralement pour voir la colonne Rôle attribué.

    3. Répétez les étapes précédentes pour attribuer le rôle User à l’utilisateur User.

    4. Sélectionnez Actualiser et vous devriez voir les utilisateurs et les rôles attribués dans le volet Utilisateurs et groupes.

      Capture d’écran du portail Azure montrant les utilisateurs et les rôles attribués.

      Vous devrez peut-être ajuster la largeur des en-têtes de colonne pour que votre affichage ressemble à l’image.

Ne suivez aucune autre étape dans la section Ajouter des rôles d’application à votre application et les recevoir dans le jeton.

Protéger une application WebSphere Liberty/Open Liberty en utilisant OpenID Connect

Dans cette section, vous sécurisez une application WebSphere Liberty/Open Liberty qui authentifie et autorise les utilisateurs dans votre tenant Microsoft Entra en utilisant OIDC. Vous apprendrez également à donner aux utilisateurs accès à certaines parties de l’application en utilisant le contrôle d’accès basé sur les rôles (RBAC). L’application utilise la configuration de la politique de sécurité programmatique de la spécification Jakarta Servlet. Jakarta EE prend également en charge les services web RESTful. Voir la section Prochaines étapes pour une référence à un article sur la sécurisation d’une application de services web RESTful.

L’application exemple WebSphere Liberty/Open Liberty pour cette prise en main rapide est sur GitHub dans le référentiel liberty-entra-id.

Activer l’authentification et l’autorisation pour sécuriser l’application

L’application dispose d’une ressource de page d’accueil définie dans index.html, comme illustré dans l’exemple de code suivant. Cette page est accessible aux utilisateurs non authentifiés. Le chemin racine de la page d’accueil est à /.

HTML
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Greeting</title>
</head>
<body>
<h1>Hello, welcome to Open Liberty/WebSphere Liberty and Microsoft Entra ID integration!</h1>
<h1>
    <a href="/profile/user">Sign in as user</a>
</h1>
<h1>
    <a href="/profile/admin">Sign in as admin</a>
</h1>
</body>
</html>

Depuis la page d’accueil, les utilisateurs peuvent se connecter à l’application pour accéder à la page de profil. La page d’accueil a des liens pour se connecter en tant qu’utilisateur ou en tant qu’administrateur. Les liens sont respectivement /profile/user et /profile/admin.

Les liens /profile/user et /profile/admin pointent tous deux vers le servlet de profil, défini dans ProfileServlet.java, comme illustré dans l’exemple de code suivant. Ce servlet est accessible uniquement aux utilisateurs authentifiés en utilisant l’annotation jakarta.servlet.annotation.ServletSecurity et l’annotation jakarta.servlet.annotation.HttpConstraint. L’attribut rolesAllowed = {"users"} spécifie que seuls les utilisateurs authentifiés avec le rôle de sécurité users peuvent accéder au chemin /profile. L’utilisateur authentifié se voit automatiquement attribuer le rôle users dans le fichier de configuration Liberty server.xml.

Java
package com.example;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.HttpConstraint;
import jakarta.servlet.annotation.ServletSecurity;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

import com.ibm.websphere.security.social.UserProfileManager;
import java.util.List;

@WebServlet(name = "ProfileServlet", urlPatterns = {"/profile/user","/profile/admin"})
@ServletSecurity(value = @HttpConstraint(rolesAllowed = {"users"},
        transportGuarantee = ServletSecurity.TransportGuarantee.CONFIDENTIAL))
public class ProfileServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        List<?> roles = UserProfileManager.getUserProfile().getIdToken().getClaims().getClaim("roles",
                List.class);

        String path = request.getServletPath();
        if (path.equals("/profile/admin") && (null == roles || !roles.contains("admin"))) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN);
            return;
        }

        String username = request.getUserPrincipal().getName();
        request.setAttribute("name", username);
        request.setAttribute("roles", roles);

        request
                .getRequestDispatcher("/profile.jsp")
                .forward(request, response);
    }
}

Le servlet de profil récupère les rôles de l’utilisateur à partir du jeton d’identité et vérifie si l’utilisateur possède le rôle admin lorsque celui-ci tente d’accéder au chemin /profile/admin. Si l’utilisateur n’a pas le rôle admin, le servlet renvoie une erreur 403 Forbidden. Dans d’autres cas, le servlet récupère le nom de l’utilisateur et redirige la requête vers la page de profil avec le nom et les rôles de l’utilisateur.

La page de profil est définie dans profile.jsp, comme illustré dans l’exemple suivant. Cette page affiche le nom et les rôles de l’utilisateur. La page de profil comporte également un lien de déconnexion à /logout. La page de profil est écrite en JSP (Jakarta Server Pages). Notez l’utilisation des expressions ${} dans la page. ${} Indique l’utilisation de Jakarta Expression Language (EL). Les expressions EL sont remplacées par les valeurs des variables correspondantes lorsque la page est rendue. Voir la section Prochaines étapes pour une référence à la spécification EL.

jsp
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
    <meta charset="UTF-8">
    <title>Profile</title>
</head>
<body>
<h1>Hello, ${name}</h1>
<h2>Roles</h2>
<ul>
    <c:forEach var="role" items="${roles}">
        <li>${role}</li>
    </c:forEach>
</ul>
<h1>
    <b><a href="/logout">Sign out</a></b>
</h1>
</body>
</html>

Lorsque l’utilisateur sélectionne le lien pour se déconnecter, l’application appelle le servlet de déconnexion, défini dans LogoutServlet.java, comme illustré dans l’exemple de code suivant. Le servlet de déconnexion appelle la méthode request.logout() pour déconnecter l’utilisateur, puis le redirige vers la page d’accueil.

Java
package com.example;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.HttpConstraint;
import jakarta.servlet.annotation.ServletSecurity;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "LogoutServlet", urlPatterns = "/logout")
@ServletSecurity(value = @HttpConstraint(rolesAllowed = {"users"},
        transportGuarantee = ServletSecurity.TransportGuarantee.CONFIDENTIAL))
public class LogoutServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        request.logout();
        response.sendRedirect("/");
    }
}

Exécuter et tester l’application WebSphere Liberty/Open Liberty

Dans cette section, vous exécutez et testez l’application WebSphere Liberty/Open Liberty pour voir comment elle fonctionne avec Microsoft Entra ID en tant que fournisseur OIDC.

Ajouter une URI de redirection à l’enregistrement de l’application

Pour exécuter et tester correctement l’application localement, vous devez ajouter une URI de redirection à l’enregistrement de l’application. Suivez les instructions de la section Ajouter une URI de redirection de Prise en main rapide : Enregistrer une application avec la plateforme d’identité Microsoft, et utilisez les valeurs suivantes :

  • Pour Configurer les plateformes, sélectionnez Web.
  • Pour URI de redirection, utilisez https://localhost:9443/ibm/api/social-login/redirect/liberty-entra-id.

Préparer l’exemple

Utilisez les étapes suivantes pour préparer l’application exemple :

  1. Utilisez les commandes suivantes pour cloner l’application exemple à partir de GitHub :

    Bash
    git clone https://github.com/Azure-Samples/liberty-entra-id
    cd liberty-entra-id
    git checkout 2024-09-26
    

    Si vous voyez un message concernant l'état detached HEAD, vous pouvez l'ignorer en toute sécurité. Ce message signifie simplement que vous avez extrait une balise.

  2. Utilisez les commandes suivantes pour définir les variables d’environnement suivantes avec les valeurs que vous avez notées précédemment :

    Bash
    export CLIENT_ID==<application/client-ID>
    export CLIENT_SECRET=<client-secret>
    export TENANT_ID=<directory/tenant-ID>
    

    Ces variables d’environnement fournissent les valeurs pour la prise en charge intégrée de l’OIDC dans WebSphere Liberty/Open Liberty. La configuration OIDC correspondante dans le fichier server.xml de Liberty est montrée dans l’exemple suivant.

    XML
     <oidcLogin
         id="liberty-entra-id" clientId="${client.id}"
         clientSecret="${client.secret}"
         discoveryEndpoint="https://login.microsoftonline.com/${tenant.id}/v2.0/.well-known/openid-configuration"
         signatureAlgorithm="RS256"
         userNameAttribute="preferred_username" />
    

    Si la valeur d’une variable n’est pas définie dans le fichier de configuration, WebSphere Liberty/Open Liberty lit la valeur à partir des variables d’environnement en suivant sa convention de nommage. Pour plus de détails sur la conversion de nom, voir Précédence de la substitution des variables.

Exécuter l’application WebSphere Liberty/Open Liberty

Vous pouvez exécuter l’application en utilisant liberty-maven-plugin. Pour exécuter l’application, sélectionnez l’une des méthodes suivantes :

Note

Pour permettre à WebSphere Liberty/Open Liberty de se connecter à Microsoft Entra ID, assurez-vous d’exécuter la commande dans le shell dans lequel vous avez défini les variables d’environnement présentées dans la section précédente.

  • Exécuter l’application en mode développement :

    Bash
    mvn liberty:dev
    
  • Exécuter l’application en mode d’exécution :

    Bash
    mvn liberty:run
    

Si vous souhaitez essayer différents modes, utilisez Ctrl+C pour arrêter l’application puis exécutez-la dans un autre mode.

Tester l’application WebSphere Liberty/Open Liberty

Après avoir lancé l’application, ouvrez un navigateur web avec un onglet privé et accédez à https://localhost:9443. Étant donné que le certificat est auto-signé, vous pourriez voir un avertissement concernant le certificat. Vous pouvez ignorer cet avertissement en toute sécurité et continuer vers le site.

Vous devriez voir la page d’accueil avec des liens pour vous connecter en tant qu’utilisateur ou en tant qu’administrateur. L’utilisation d’un onglet privé permet d’éviter de polluer toute activité existante de Microsoft Entra ID que vous pourriez avoir dans votre navigateur habituel.

Capture d’écran de l’application d’exemple qui montre la page d’accueil.

Rassemblez les informations d’identification pour les deux utilisateurs

Dans cet article, Microsoft Entra ID utilise l’adresse e-mail de chaque utilisateur comme identifiant utilisateur pour se connecter. Suivez les étapes suivantes pour obtenir l’adresse e-mail pour l’utilisateur administrateur et l’utilisateur régulier :

  1. Connectez-vous au Centre d’administration de Microsoft Entra au minimum en tant qu’Administrateur d’application cloud.
  2. Si vous avez accès à plusieurs locataires, utilisez l’icône Paramètres ( ) dans le menu supérieur pour passer au locataire dans lequel vous souhaitez enregistrer l’application à partir du menu Répertoires + abonnements.
  3. Accédez à Identité > Utilisateurs > Tous les utilisateurs.
  4. Localisez l’utilisateur administrateur dans la liste et sélectionnez-le.
  5. Localisez le champ Nom principal de l’utilisateur.
  6. Utilisez l’icône de copie à côté de la valeur du champ pour enregistrer l’adresse e-mail de l’utilisateur dans le presse-papiers. Enregistrez la valeur pour une utilisation ultérieure.
  7. Pour obtenir l’adresse e-mail de l’utilisateur régulier, suivez la même procédure.

Utilisez les mots de passe pour l’utilisateur administrateur et l’utilisateur régulier que vous avez définis lors de la création des utilisateurs.

Exercez la fonctionnalité de l’application

Suivez les étapes suivantes pour exercer la fonctionnalité :

  1. Sélectionnez le lien Se connecter en tant qu’utilisateur. Connectez-vous avec l’utilisateur régulier que vous avez créé précédemment. Après vous être connecté, Microsoft Entra ID vous redirige vers la page de profil, où vous voyez votre nom et vos rôles.

    Capture d’écran de l’application d’exemple qui montre le profil utilisateur.

  2. Si c’est la première fois que vous vous connectez, vous êtes invité à mettre à jour votre mot de passe. Suivez les instructions pour mettre à jour votre mot de passe.

  3. Si vous êtes invité avec Votre organisation exige des informations de sécurité supplémentaires. Suivez les invites pour télécharger et configurer l’application Microsoft Authenticator, vous pouvez sélectionner Demander plus tard pour continuer le test.

  4. Si vous êtes invité avec Autorisations demandées, examinez les autorisations demandées par l’application. Sélectionnez Accepter pour continuer le test.

  5. Sélectionnez Se déconnecter pour vous déconnecter de l’application. Après la déconnexion, vous êtes redirigé vers la page d’accueil.

  6. Sélectionnez le lien Se connecter en tant qu’administrateur. Microsoft Entra ID vous redirige vers la page de connexion. Connectez-vous avec l’utilisateur administrateur que vous avez créé précédemment. Après vous être connecté, Microsoft Entra ID vous redirige vers une page de profil similaire, avec un rôle différent admin.

    Capture d’écran de l’application d’exemple qui montre le profil administrateur.

  7. Déconnectez-vous à nouveau et essayez de Se connecter en tant qu’administrateur avec l’utilisateur régulier que vous avez créé précédemment. Vous devriez voir un message d’erreur car l’utilisateur régulier n’a pas le admin rôle.

    Capture d’écran de l’application d’exemple qui montre le message d’accès refusé.

Nettoyer les ressources

Cet article ne vous dirige pas à déployer votre application sur Azure. Il n’y a pas de ressources Azure à nettoyer pour l’application, bien qu’il y ait des ressources Microsoft Entra ID. Pour déployer une application sur Azure, vous pouvez suivre les directives référencées dans la section suivante.

Lorsque vous avez terminé avec les ressources pour cette application d’exemple, utilisez les étapes suivantes pour nettoyer les ressources Microsoft Entra ID. La suppression des ressources Microsoft Entra ID non utilisées est une bonne pratique de sécurité importante.

  1. Supprimez l’enregistrement de l’application que vous avez créé en suivant les étapes de la section Supprimer une application enregistrée avec la plateforme d’identité Microsoft. Vous n’avez besoin de suivre que les étapes de la section Supprimer une application créée par votre organisation.
  2. L’action de supprimer l’enregistrement de l’application devrait également supprimer l’application d’entreprise. Pour plus d’informations sur la suppression des applications d’entreprise, veuillez consulter la section Supprimer une application d’entreprise.
  3. Supprimez les utilisateurs que vous avez créés en suivant les étapes de la section Comment créer, inviter et supprimer des utilisateurs.

Étapes suivantes

Dans cette prise en main rapide, vous protégez les applications WebSphere Liberty/Open Liberty avec Microsoft Entra ID en utilisant OIDC. Pour en savoir plus, explorez les ressources suivantes :