Przepływ kodu urządzenia

Uwierzytelnianie interakcyjne przy użyciu identyfikatora Entra firmy Microsoft wymaga przeglądarki internetowej. Jednak w przypadku urządzeń i systemów operacyjnych, które nie udostępniają przeglądarki internetowej, przepływ kodu urządzenia umożliwia użytkownikowi korzystanie z innego urządzenia (na przykład innego komputera lub telefonu komórkowego) w celu interaktywnego logowania. Korzystając z przepływu kodu urządzenia, aplikacja uzyskuje tokeny za pośrednictwem dwuetapowego procesu specjalnie zaprojektowanego dla tych urządzeń/systemu operacyjnego. Przykładami takich zastosowań są aplikacje działające na platformie IoT lub narzędzia wiersza poleceń (CLI).

Typowy przepływ kodu urządzenia jest zgodny z krokami:

  1. Za każdym razem, gdy wymagane jest uwierzytelnianie użytkownika, aplikacja udostępnia kod dla użytkownika. Użytkownik jest proszony o użycie innego urządzenia, takiego jak smartfon połączony z Internetem, aby przejść do adresu URL, na przykład , https://microsoft.com/devicelogini wprowadzić kod. W takim przypadku strona internetowa prowadzi użytkownika przez normalne środowisko uwierzytelniania, w tym monity o wyrażenie zgody i uwierzytelnianie wieloskładnikowe, jeśli jest to konieczne.

  2. Po pomyślnym uwierzytelnieniu aplikacja wiersza polecenia odbiera wymagane tokeny za pośrednictwem kanału zaplecza i używa ich do wykonywania wywołań internetowego interfejsu API, których potrzebuje.

Constraints

  • Przepływ kodu urządzenia jest dostępny tylko dla publicznych aplikacji klienckich
  • Organ przekazany w elemencie PublicClientApplication musi być skonfigurowany jako jedna z poniższych opcji:
    • Dzierżawa ma postać https://login.microsoftonline.com/{tenant}/, gdzie tenant to identyfikator GUID reprezentujący identyfikator dzierżawy lub domena skojarzona z dzierżawą.
    • Konta służbowe i szkolne (https://login.microsoftonline.com/organizations/)

Konta osobiste Microsoft nie są jeszcze obsługiwane przez punkt końcowy Azure AD v2.0 (nie można używać dzierżaw /common ani /consumers).

Fragment kodu

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

Dodatkowe informacje

Jeśli chcesz dowiedzieć się więcej o przepływie kodu urządzenia: