Partager via


Sécuriser les applications Quarkus avec Microsoft Entra ID en utilisant OpenID Connect

Cet article vous montre comment sécuriser les applications Red Hat Quarkus avec Microsoft Entra ID en utilisant OpenID Connect (OIDC).

Dans cet article, vous apprendrez comment :

  • Configurer un fournisseur OpenID Connect avec Microsoft Entra ID.
  • Protéger une application Quarkus en utilisant OpenID Connect.
  • Exécuter et tester l’application Quarkus.

Prérequis

Configurer un fournisseur OpenID Connect avec Microsoft Entra ID

Dans cette section, vous configurez un fournisseur OpenID Connect avec Microsoft Entra ID pour l’utiliser avec votre application Quarkus. Dans une section ultérieure, vous configurez l’application Quarkus en utilisant OpenID Connect pour authentifier et autoriser les utilisateurs dans votre locataire 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 Quarkus en utilisant OpenID Connect

Dans cette section, vous sécurisez une application Quarkus qui authentifie et autorise les utilisateurs dans votre locataire Microsoft Entra en utilisant OpenID Connect. 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 Quarkus d’exemple pour ce démarrage rapide est sur GitHub dans le référentiel quarkus-azure, et se trouve dans le répertoire entra-id-quarkus.

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

L’application a une ressource de page d’accueil définie dans WelcomePage.java, qui est montrée dans l’exemple de code suivant. Cette page est accessible aux utilisateurs non authentifiés. Le chemin racine de la page d’accueil est à /.

@Path("/")
public class WelcomePage {

    private final Template welcome;

    public WelcomePage(Template welcome) {
        this.welcome = requireNonNull(welcome, "welcome page is required");
    }

    @GET
    @Produces(MediaType.TEXT_HTML)
    public TemplateInstance get() {
        return welcome.instance();
    }

}

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. L’interface utilisateur de la page d’accueil est définie dans welcome.qute.html et montrée dans l’exemple suivant :

<html>
    <head>
        <meta charset="UTF-8">
        <title>Greeting</title>
    </head>
    <body>
        <h1>Hello, welcome to Quarkus 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>

Les deux liens /profile/user et /profile/admin pointent vers la ressource de la page de profil, définie dans ProfilePage.java, comme montré dans l’exemple de code suivant. Cette page est accessible uniquement aux utilisateurs authentifiés en utilisant l’annotation @RolesAllowed("**") du package jakarta.annotation.security.RolesAllowed. L’annotation @RolesAllowed("**") spécifie que seuls les utilisateurs authentifiés peuvent accéder au chemin /profile.

@Path("/profile")
@RolesAllowed("**")
public class ProfilePage {

    private final Template profile;

    @Inject
    SecurityIdentity identity;

    @Inject
    JsonWebToken accessToken;

    public ProfilePage(Template profile) {
        this.profile = requireNonNull(profile, "profile page is required");
    }

    @Path("/admin")
    @GET
    @Produces(MediaType.TEXT_HTML)
    @RolesAllowed("admin")
    public TemplateInstance getAdmin() {
        return getProfile();
    }

    @Path("/user")
    @GET
    @Produces(MediaType.TEXT_HTML)
    @RolesAllowed({"user","admin"})
    public TemplateInstance getUser() {
        return getProfile();
    }

    private TemplateInstance getProfile() {
        return profile
                .data("name", identity.getPrincipal().getName())
                .data("roles", identity.getRoles())
                .data("scopes", accessToken.getClaim("scp"));
    }

}

La ressource de la page de profil active le RBAC en utilisant l’annotation @RolesAllowed. Les arguments de l’annotation @RolesAllowed spécifient que seuls les utilisateurs avec le rôle admin peuvent accéder au chemin /profile/admin, et les utilisateurs avec le rôle user ou admin peuvent accéder au chemin /profile/user.

Les deux points d’extrémité /profile/admin et /profile/user renvoient la page de profil. L’interface utilisateur de la page de profil est définie dans profile.qute.html, comme montré dans l’exemple suivant. Cette page affiche le nom de l’utilisateur, les rôles et les portées. La page de profil a également un lien de déconnexion à /logout, qui redirige l’utilisateur vers le fournisseur OIDC pour se déconnecter. La page de profil est écrite en utilisant le moteur de templates Qute. Notez l’utilisation des expressions {} dans la page. Ces expressions utilisent les valeurs passées à TemplateInstance en utilisant la méthode data(). Pour plus d’informations sur Qute, veuillez consulter la section Moteur de templates Qute.

<html>
    <head>
        <meta charset="UTF-8">
        <title>Profile</title>
    </head>
    <body>
        <h1>Hello, {name}</h1>
        <h2>Roles</h2>
        <ul>
            {#if roles}
                {#for role in roles}
                    <li>{role}</li>
                {/for}
            {#else}
                <li>No roles found!</li>
            {/if}
        </ul>
        <h2>Scopes</h2>
        <p>
            {scopes}
        </p>
        <h1>
            <b><a href="/logout">Sign out</a></b>
        </h1>
    </body>
</html>

Après la déconnexion, l’utilisateur est redirigé vers la page d’accueil et peut se reconnecter.

Exécuter et tester l’application Quarkus

Dans cette section, vous exécutez et testez l’application Quarkus pour voir comment elle fonctionne avec Microsoft Entra ID en tant que fournisseur OpenID Connect.

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 http://localhost:8080.

Préparer l’exemple

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

  1. Utilisez les commandes suivantes pour cloner l’exemple d’application Quarkus à partir de GitHub et accédez au répertoire entra-id-quarkus :

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

    Si un message vous signale que vous allez passer à l’état detached HEAD, vous pouvez ignorer ce message sans risque. Étant donné que cet article ne nécessite aucune validation, l’état détaché HEAD est approprié.

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

    export QUARKUS_OIDC_CLIENT_ID=<application/client-ID>
    export QUARKUS_OIDC_CREDENTIALS_SECRET=<client-secret>
    export QUARKUS_OIDC_AUTH_SERVER_URL=https://login.microsoftonline.com/<directory/tenant-ID>/v2.0
    

    Ces variables d’environnement fournissent les valeurs pour la prise en charge intégrée d’OpenID Connect dans Quarkus. Les propriétés correspondantes dans application.properties sont montrées dans l’exemple suivant.

    quarkus.oidc.client-id=
    quarkus.oidc.credentials.secret=
    quarkus.oidc.auth-server-url=
    

    Si la valeur d’une propriété est vide dans application.properties, Quarkus convertit le nom de la propriété en une variable d’environnement et lit la valeur depuis l’environnement. Pour plus de détails sur la conversion de nom, veuillez consulter la section la spécification MicroProfile Config.

Exécuter l’application Quarkus

Vous pouvez exécuter l’application Quarkus dans différents modes. Sélectionnez l’une des méthodes suivantes pour exécuter l’application Quarkus. Pour permettre à Quarkus 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 montrées dans la section précédente.

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

    mvn quarkus:dev
    
  • Exécuter l’application Quarkus en mode JVM :

    mvn install
    java -jar target/quarkus-app/quarkus-run.jar
    
  • Exécuter l’application Quarkus en mode natif :

    mvn install -Dnative -Dquarkus.native.container-build
    ./target/quarkus-ad-1.0.0-SNAPSHOT-runner
    

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

Tester l’application Quarkus

Dès que l'application Quarkus est en cours de fonctionnement, ouvrez un navigateur web en mode privé et accédez à http://localhost:8080. 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, vos rôles et vos périmètres.

    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, il vous est demandé de 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 Quarkus. Microsoft Entra ID effectue la déconnexion. Après vous être déconnecté, Microsoft Entra ID vous redirige 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 ce guide de démarrage rapide, vous protégez les applications Quarkus avec Microsoft Entra ID en utilisant OpenID Connect. Pour en savoir plus, explorez les ressources suivantes :