Partager via


Authentifier les applications Java aux services Azure lors du développement local en utilisant l’authentification intermédiaire

L’authentification répartie collecte les informations d’identification de l’utilisateur à l’aide du répartiteur d’authentification système pour authentifier une application. Un courtier d’authentification système est une application s’exécutant sur l’ordinateur d’un utilisateur qui gère les échanges d’authentification et la maintenance des jetons pour tous les comptes connectés.

L’authentification répartie offre les avantages suivants :

  • Enables Single Sign-On (SSO) : permet aux applications de simplifier la façon dont les utilisateurs s’authentifient avec Microsoft Entra ID et protègent les jetons d’actualisation Microsoft Entra ID contre l’exfiltration et l’utilisation abusive.
  • Sécurité renforcée : De nombreuses améliorations de sécurité sont fournies avec le répartiteur, sans avoir à mettre à jour la logique de l’application.
  • Prise en charge améliorée des fonctionnalités : Grâce à l’aide du répartiteur, les développeurs peuvent accéder à des fonctionnalités de système d’exploitation et de service riches.
  • Intégration du système : Les applications qui utilisent le broker plug-and-play avec le sélecteur de compte intégré, permettant à l'utilisateur de choisir rapidement un compte existant au lieu de rentrer les mêmes informations d’identification à plusieurs reprises.
  • Protection des jetons : Garantit que les jetons d’actualisation sont liés à l’appareil et permet aux applications d’acquérir des jetons d’accès liés à l’appareil. Voir Protection des jetons.

Windows fournit un répartiteur d’authentification appelé Web Account Manager (WAM). WAM permet aux fournisseurs d’identité tels que Microsoft Entra ID de se connecter en mode natif au système d’exploitation et de fournir des services de connexion sécurisés aux applications. L'authentification intermédiaire habilite l'application pour toutes les opérations autorisées par les informations d'identification de connexion interactives.

Les comptes personnels Microsoft et les comptes professionnels ou scolaires sont pris en charge. Sur les versions de Windows prises en charge, l’interface utilisateur basée sur un navigateur par défaut est remplacée par une expérience d’authentification plus fluide, similaire aux applications intégrées Windows.

Configurer l’application pour l’authentification répartie

Pour activer l’authentification répartie dans votre application, procédez comme suit :

  1. Dans le portail Azure, accédez à Microsoft Entra ID puis sélectionnez App registrations dans le menu de gauche.

  2. Sélectionnez l'enregistrement de votre application, puis sélectionnez Authentification.

  3. Ajoutez l’URI de redirection approprié à votre inscription d’application via une configuration de plateforme :

    1. Sous Configurations des plateformes, sélectionnez + Ajouter une plateforme.

    2. Sous Configurer des plateformes, sélectionnez la vignette de votre type d’application (plateforme) pour configurer ses paramètres, tels que les applications mobiles et de bureau.

    3. Dans les URI de redirection personnalisés, entrez l’URI de redirection suivant :

      ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}

      Remplacez {your_client_id} par l’ID d’application (client) dans le volet Vue d’ensemble de l’inscription de l’application.

    4. Sélectionnez Configurer.

    Pour en savoir plus, consultez Ajouter un URI de redirection à l'enregistrement d'une application.

  4. De nouveau dans le volet Authentification, sous Paramètres avancés, sélectionnez Oui pour Autoriser les flux de clients publics.

  5. Sélectionnez Enregistrer pour appliquer les modifications.

  6. Pour autoriser l’application pour des ressources spécifiques, accédez à la ressource en question, sélectionnez autorisationsAPI et activez Microsoft Graph et d’autres ressources auxquelles vous souhaitez accéder.

    Important

    Vous devez également être l'administrateur de votre locataire pour accorder le consentement à votre application lorsque vous vous connectez pour la première fois.

Attribuer des rôles

Pour exécuter correctement votre code d’application avec l’authentification répartie, accordez à votre compte d’utilisateur des autorisations à l’aide de Azure contrôle d’accès en fonction du rôle (RBAC). Attribuez un rôle approprié à votre compte d’utilisateur pour le service Azure approprié. Par exemple:

  • Azure Blob Storage : attribuez le rôle Storage Account Data Contributor.
  • Azure Key Vault : attribuez le rôle Key Vault Secret Officer.

Si une application est spécifiée, elle doit avoir des autorisations d’API définies pour user_impersonation Access Azure Storage (étape 6 dans la section précédente). Cette autorisation d’API permet à l’application d’accéder au stockage Azure pour le compte de l’utilisateur connecté une fois le consentement accordé lors de la connexion.

Implémenter le code

La bibliothèque Azure Identity prend en charge l’authentification répartie à l’aide de InteractiveBrowserCredential. La bibliothèque azure-identity-broker fournit InteractiveBrowserBrokerCredentialBuilder, qui crée une InteractiveBrowserCredential capable d’utiliser le répartiteur d’authentification du système. Par exemple, pour utiliser l’authentification répartie dans une application console Java pour s’authentifier auprès de Azure Key Vault avec le SecretClient, procédez comme suit :

  1. Ajoutez la azure-identity-broker dépendance à votre pom.xml fichier :

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-broker</artifactId>
    </dependency>
    
  2. Obtenez une référence à la fenêtre parente en haut de laquelle la boîte de dialogue du sélecteur de compte doit apparaître. Pour obtenir des exemples, consultez Obtenir un handle de fenêtre.

  3. Créez une instance de InteractiveBrowserCredential en utilisant InteractiveBrowserBrokerCredentialBuilder.

    import com.azure.identity.InteractiveBrowserCredential;
    import com.azure.identity.broker.InteractiveBrowserBrokerCredentialBuilder;
    import com.azure.security.keyvault.secrets.SecretClient;
    import com.azure.security.keyvault.secrets.SecretClientBuilder;
    import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
    
    long windowHandle = getWindowHandle(); // See examples below
    
    InteractiveBrowserCredential credential = new InteractiveBrowserBrokerCredentialBuilder()
        .setWindowHandle(windowHandle)
        .useDefaultBrokerAccount()
        .build();
    
    SecretClient client = new SecretClientBuilder()
        .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
        .credential(credential)
        .buildClient();
    
    KeyVaultSecret secret = client.getSecret("MySecret");
    System.out.println("Retrieved secret: " + secret.getName());
    

Dans l’exemple précédent, useDefaultBrokerAccount opte pour un flux d’authentification silencieux orchestré avec le compte système par défaut. De cette façon, l’utilisateur n’a pas à sélectionner à plusieurs reprises le même compte. En cas d’échec de l’authentification intermédiée silencieuse, InteractiveBrowserCredential revient à une authentification intermédiée interactive.

La capture d’écran suivante montre l’expérience d’authentification interactive et répartie alternative :

Screenshot de l’expérience de connexion Windows lors de l’utilisation d’une instance InteractiveBrowserCredential compatible avec broker pour authentifier un utilisateur.

Obtenir un handle de fenêtre

Lorsque vous vous authentifiez de manière interactive à l'aide de InteractiveBrowserCredential, vous avez besoin d'un handle de fenêtre parent pour vous assurer que la boîte de dialogue d'authentification s'affiche correctement sur la fenêtre qui envoie la requête.

Application JavaFX

Pour une application JavaFX, utilisez JNA (Java Native Access) pour obtenir le handle de fenêtre :

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;

public long getWindowHandle(Stage stage) {
    WinDef.HWND hwnd = User32.INSTANCE.FindWindow(null, stage.getTitle());
    return Pointer.nativeValue(hwnd.getPointer());
}

Application de console

Pour une application console sur Windows, utilisez JNA pour obtenir le handle de la fenêtre de console :

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinDef;

WinDef.HWND hwnd = Kernel32.INSTANCE.GetConsoleWindow();
long windowHandle = Pointer.nativeValue(hwnd.getPointer());