Tok kódu zařízení

Interaktivní ověřování pomocí Microsoft Entra ID vyžaduje webový prohlížeč. V případě zařízení a operačních systémů, které neposkytují webový prohlížeč, ale tok kódu zařízení umožňuje uživateli používat jiné zařízení (například jiný počítač nebo mobilní telefon) k interaktivnímu přihlášení. Pomocí toku kódu zařízení aplikace získá tokeny prostřednictvím dvoustupňového procesu, který je speciálně určený pro tato zařízení nebo operační systém. Příklady takových aplikací jsou aplikace běžící na zařízeních IoT nebo nástroje příkazového řádku (CLI).

Typický tok kódu zařízení se řídí postupem:

  1. Pokaždé, když je vyžadováno ověření uživatele, aplikace poskytne uživateli kód. Uživatel se zobrazí výzva k použití jiného zařízení, například smartphonu připojeného k internetu, k přechodu na adresu URL, například https://microsoft.com/devicelogin, a k zadání kódu. To znamená, že webová stránka uživatele provede normálním prostředím ověřování, které v případě potřeby zahrnuje výzvy k vyjádření souhlasu a vícefaktorové ověřování.

  2. Po úspěšném ověření aplikace příkazového řádku obdrží požadované tokeny prostřednictvím zpětného kanálu a použije je k provádění potřebných volání webového rozhraní API.

Omezení

  • Tok kódu zařízení je k dispozici pouze pro veřejné klientské aplikace.
  • Autorita předaná v PublicClientApplication musí být nakonfigurována jako jedna z níže uvedených možností:
    • Tenant ve tvaru https://login.microsoftonline.com/{tenant}/, kde tenant je buď identifikátor GUID představující ID tenanta, nebo doména přidružená k tenantovi.
    • Všechny pracovní a školní účty (https://login.microsoftonline.com/organizations/)

Osobní účty Microsoft zatím nejsou koncovým bodem služby Azure AD v2.0 podporovány (nelze použít klienty /common ani /consumers).

Fragment kódu

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

Další informace

Pokud chcete získat další informace o toku kódu zařízení: