裝置代碼流程

使用 Microsoft Entra ID 的互動式驗證需要網頁瀏覽器。 然而,對於不提供網頁瀏覽器的裝置與作業系統,裝置程式碼流程允許使用者使用其他裝置(例如另一台電腦或手機)進行互動式登入。 透過裝置程式碼流程,應用程式透過專為這些裝置/作業系統設計的兩步驟流程取得令牌。 此類應用的例子包括運行於物聯網上的應用程式,或 Command-Line 工具(CLI)。

典型的裝置程式碼流程如下:

  1. 每當需要使用者驗證時,應用程式會為使用者提供程式碼。 使用者被要求使用其他裝置,例如連網的智慧型手機,前往 https://microsoft.com/devicelogin網址(例如 ),並輸入代碼。 如此一來,網頁會引導使用者完成一般的驗證體驗,其中包括同意提示和多重要素驗證 (如有需要)。

  2. 成功驗證之後,命令列應用程式會透過後端通道接收所需的權杖,並使用這些權杖來執行所需的 Web API 呼叫。

Constraints

  • 裝置程式碼流程僅適用於公開客戶端應用程式
  • 傳入 PublicClientApplication 的權限必須設定為下列選項之一:
    • 租戶形式為 https://login.microsoftonline.com/{tenant}/ ,其中 tenant 是代表租戶 ID 的 GUID,或是與租戶相關的網域。
    • 任何工作或學校帳戶(https://login.microsoftonline.com/organizations/)

Microsoft 個人帳號尚未被 Azure AD v2.0 端點支援(你無法使用/common或/consumers租戶)。

程式碼摘要

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

其他資訊

如果你想了解更多關於裝置程式碼流程的資訊: