Événement
Créer des applications et des agents IA
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
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 :
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.
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 :
Pour Nom principal de l’utilisateur, entrez admin. Enregistrez la valeur pour pouvoir l’utiliser plus tard lors de la connexion à l’application.
Pour Surnom de messagerie, sélectionnez Déduire du nom principal de l’utilisateur
Pour Nom d’affichage, saisissez Admin.
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.
Sélectionnez Compte activé.
Sélectionnez Vérifier + créer>Créer. Attendez que l’utilisateur soit créé.
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 :
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.
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.
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.
Créez un rôle utilisateur administrateur en utilisant les valeurs suivantes :
Sélectionnez Appliquer. Attendez que le rôle soit créé.
Créer un rôle utilisateur régulier en utilisant les mêmes étapes, mais avec les valeurs suivantes :
Lorsque vous atteignez la section Attribuer des utilisateurs et des groupes aux rôles Microsoft Entra, utilisez la procédure suivante :
Sélectionner Ajouter un utilisateur/groupe.
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é.
Répétez les étapes précédentes pour attribuer le rôle User à l’utilisateur User.
Sélectionnez Actualiser et vous devriez voir les utilisateurs et les rôles attribués dans le volet Utilisateurs et groupes.
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.
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.
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 à /
.
<!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.
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.
<%@ 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.
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("/");
}
}
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.
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 :
https://localhost:9443/ibm/api/social-login/redirect/liberty-entra-id
.Utilisez les étapes suivantes pour préparer l’application exemple :
Utilisez les commandes suivantes pour cloner l’application exemple à partir de GitHub :
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.
Utilisez les commandes suivantes pour définir les variables d’environnement suivantes avec les valeurs que vous avez notées précédemment :
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.
<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.
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 :
mvn liberty:dev
Exécuter l’application en mode d’exécution :
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.
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.
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 :
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.
Suivez les étapes suivantes pour exercer la fonctionnalité :
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.
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.
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.
Si vous êtes invité avec Autorisations demandées, examinez les autorisations demandées par l’application. Sélectionnez Accepter pour continuer le test.
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.
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
.
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.
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.
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 :
Événement
Créer des applications et des agents IA
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantFormation
Module
Connecter des utilisateurs avec Microsoft Entra ID dans une application web Java - Training
Découvrez comment authentifier des utilisateurs avec Microsoft Entra ID et obtenir un accès autorisé aux données dans une application web Java en utilisant la bibliothèque d’authentification Microsoft.
Certification
Microsoft Certified: Identity and Access Administrator Associate - Certifications
Expliquez les fonctionnalités de Microsoft Entra ID pour moderniser des solutions d’identité, implémenter des solutions hybrides et une gouvernance des identités.