Flux de code de périphérique

L’authentification interactive avec Microsoft Entra ID nécessite un navigateur web. Toutefois, dans le cas d’appareils et de systèmes d’exploitation qui ne fournissent pas de navigateur web, le flux de code de l’appareil permet à l’utilisateur d’utiliser un autre appareil (par exemple un autre ordinateur ou un téléphone mobile) pour se connecter de manière interactive. En utilisant le flux de code de l’appareil, l’application obtient des jetons par le biais d’un processus en deux étapes spécialement conçu pour ces appareils/systèmes d’exploitation. Par exemple, ces applications s’exécutent sur IoT ou sur des outils de Command-Line (CLI).

Un flux de code d’appareil classique suit les étapes suivantes :

  1. Chaque fois que l’authentification utilisateur est exigée, l’application fournit un code pour l’utilisateur. L’utilisateur est invité à utiliser un autre appareil, tel qu’un smartphone connecté à Internet, pour accéder à une URL, par exemple, https://microsoft.com/deviceloginet entrer le code. Une fois cette étape effectuée, la page web guide ensuite l’utilisateur tout au long d’un processus d’authentification standard, comprenant des demandes de consentement et une authentification multifacteur, si nécessaire.

  2. Après une authentification réussie, l’application de ligne de commande reçoit les jetons demandés via un canal arrière et les utilise pour effectuer les appels d’API web dont elle a besoin.

Contraintes

  • Le flux de code d’appareil est disponible uniquement pour les applications clientes publiques
  • L’autorité fournie dans le PublicClientApplication doit être configurée avec l’une des options ci-dessous :
    • Avec locataire (sous la forme https://login.microsoftonline.com/{tenant}/tenant est le GUID représentant l’ID de locataire ou un domaine associé au locataire).
    • Tous les comptes professionnels et scolaires (https://login.microsoftonline.com/organizations/)

Les comptes personnels Microsoft ne sont pas encore pris en charge par le point de terminaison Azure AD v2.0 (vous ne pouvez pas utiliser les locataires /common ou /consumers).

Extrait de code

PublicClientApplication app = PublicClientApplication.builder(PUBLIC_CLIENT_ID)
        .authority(AUTHORITY)
        .build();

Consumer<DeviceCode> deviceCodeConsumer = (DeviceCode deviceCode) -> {
    System.out.println(deviceCode.message());
};

CompletableFuture<IAuthenticationResult> future = app.acquireToken(
        DeviceCodeFlowParameters.builder(scope, deviceCodeConsumer).build());


future.handle((res, ex) -> {
    if(ex != null) {
        System.out.println("message - " + ex.getMessage());
        return "Unknown!";
    }
    System.out.println("Access Token - " + res.accessToken());
    System.out.println("ID Token - " + res.idToken());
    return res;
});

future.join();

Informations supplémentaires

Si vous souhaitez en savoir plus sur le flux de code de l’appareil :