Enhetskodflöde

Interaktiv autentisering med Microsoft Entra-ID kräver en webbläsare. När det gäller enheter och operativsystem som inte tillhandahåller en webbläsare låter dock enhetskodflödet användaren använda en annan enhet (till exempel en annan dator eller en mobiltelefon) för att logga in interaktivt. Genom att använda enhetskodflödet hämtar programmet token via en tvåstegsprocess som är särskilt utformad för dessa enheter/operativsystem. Exempel på sådana program är program som körs på IoT eller Command-Line verktyg (CLI).

Ett typiskt enhetskodflöde följer stegen:

  1. När användarautentisering krävs tillhandahåller appen en kod för användaren. Användaren uppmanas att använda en annan enhet, till exempel en internetansluten smartphone, för att gå till en URL, https://microsoft.com/devicelogintill exempel , och ange koden. Det gör att webbsidan leder användaren genom en normal autentiseringsupplevelse, som inkluderar medgivandefrågor och multifaktorautentisering, om det behövs.

  2. Vid lyckad autentisering tar kommandoradsappen emot de token som krävs via en backkanal och använder dem för att utföra de webb-API-anrop som krävs.

Constraints

  • Enhetskodflöde är endast tillgängligt för offentliga klientprogram
  • Den auktoritet som skickas in i PublicClientApplication måste konfigureras som något av alternativen nedan:
    • Klientorganisationsbaserad av formen https://login.microsoftonline.com/{tenant}/ där tenant antingen är det GUID som representerar klientorganisations-ID:t eller en domän som är kopplad till klientorganisationen.
    • Alla arbets- och skolkonton (https://login.microsoftonline.com/organizations/)

Microsoft personliga konton stöds ännu inte av Azure AD v2.0-slutpunkten (du kan inte använda /common eller /consumers klientorganisationer).

Kodstycke

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

Ytterligare information

Om du vill veta mer om enhetskodflöde: