Apparaatcodestroomproces

Voor interactieve verificatie met Microsoft Entra ID is een webbrowser vereist. In het geval van apparaten en besturingssystemen die geen webbrowser bieden, kan de gebruiker echter een ander apparaat (bijvoorbeeld een andere computer of een mobiele telefoon) gebruiken om zich interactief aan te melden. Door de apparaatcodestroom te gebruiken, verkrijgt de toepassing tokens via een proces in twee stappen dat speciaal is ontworpen voor deze apparaten/het besturingssysteem. Voorbeelden van dergelijke toepassingen zijn toepassingen die worden uitgevoerd op IoT of Command-Line hulpprogramma's (CLI).

Een typische apparaatcodestroom volgt de stappen:

  1. Wanneer gebruikersverificatie is vereist, biedt de app een code voor de gebruiker. De gebruiker wordt gevraagd een ander apparaat, zoals een smartphone met internetverbinding, te gebruiken om bijvoorbeeld https://microsoft.com/deviceloginnaar een URL te gaan en de code in te voeren. Eenmaal klaar, leidt de webpagina de gebruiker via een normale verificatie-ervaring, waaronder toestemmingsprompts en meervoudige verificatie, indien nodig.

  2. Na een geslaagde verificatie ontvangt de opdrachtregel-app de vereiste tokens via een back-kanaal en gebruikt deze om de vereiste web-API-aanroepen uit te voeren.

Constraints

  • Apparaatcodestroom is alleen beschikbaar voor openbare clienttoepassingen
  • De autoriteit die is doorgegeven in PublicClientApplication moet worden geconfigureerd als een van de onderstaande opties:
    • Tenanted van het formulier https://login.microsoftonline.com/{tenant}/ waarbij tenant de GUID de tenant-id of een domein vertegenwoordigt dat is gekoppeld aan de tenant.
    • Elk werk- en schoolaccount (https://login.microsoftonline.com/organizations/)

persoonlijke Microsoft-accounts worden nog niet ondersteund door het Azure AD v2.0-eindpunt (u kunt geen /common- of /consumers-tenants gebruiken).

Codefragment

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();

Aanvullende informatie

Als u meer wilt weten over de apparaatcodestroom: