Gerätecodefluss

Die interaktive Authentifizierung mit Microsoft Entra ID erfordert einen Webbrowser. Wenn Geräte und Betriebssysteme jedoch keinen Webbrowser bereitstellen, ermöglicht der Gerätecodefluss dem Benutzer, ein anderes Gerät (z. B. einen anderen Computer oder ein Mobiltelefon) zu verwenden, um sich interaktiv anzumelden. Mithilfe des Gerätecodeflusses ruft die Anwendung Token über einen zweistufigen Prozess ab, der speziell für diese Geräte/Das Betriebssystem entwickelt wurde. Beispiele für solche Anwendungen sind Anwendungen, die auf IoT ausgeführt werden, oder Command-Line Tools (CLI).

Ein typischer Gerätecodefluss folgt den Schritten:

  1. Wenn eine Benutzerauthentifizierung erforderlich ist, stellt die App einen Code für den Benutzer bereit. Der Benutzer wird aufgefordert, ein anderes Gerät, z. B. ein mit dem Internet verbundenes Smartphone, zu verwenden, um beispielsweise https://microsoft.com/deviceloginzu einer URL zu wechseln und den Code einzugeben. Danach wird der Benutzer auf der Webseite durch einen normalen Authentifizierungsprozess geführt, der ggf. auch Zustimmungsaufforderungen und die mehrstufige Authentifizierung umfasst.

  2. Nach erfolgreicher Authentifizierung empfängt die Befehlszeilen-App die erforderlichen Token über einen Backchannel und führt damit die benötigten Web-API-Aufrufe aus.

Constraints

  • Gerätecodefluss ist nur für öffentliche Clientanwendungen verfügbar.
  • Die in PublicClientApplication übergebene Autorität muss als eine der folgenden Optionen konfiguriert sein:
    • Sie muss auf Mandanten beruhen (im Format https://login.microsoftonline.com/{tenant}/, wobei tenant entweder die GUID ist, die die Mandanten-ID darstellt, oder eine Domäne, die dem Mandanten zugeordnet ist).
    • Alle Geschäfts- und Schulkonten (https://login.microsoftonline.com/organizations/)

Persönliche Microsoft-Konten werden vom Azure AD v2.0-Endpunkt noch nicht unterstützt (Sie können keine /common- oder /consumers-Mandanten verwenden).

Codeausschnitt

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

Zusatzinformation

Falls Sie mehr über den Gerätecodefluss erfahren möchten: