快速開始:在 Windows 桌面應用程式中登入使用者並呼叫 Microsoft Graph
在本快速入門中,您會下載並執行程式代碼範例,示範 Windows Presentation Foundation (WPF) 應用程式如何登入使用者,並取得存取令牌來呼叫 Microsoft Graph API。 您建置的桌面應用程式會使用授權碼流程與程式代碼交換證明金鑰 (PKCE) 標準配對。
如需說明,請參閱 範例的運作方式。
先決條件
註冊並下載您的快速入門應用程式
您有兩個選項可啟動快速入門應用程式:
- [Express] 選項 1:註冊並自動設定您的應用程式,然後下載您的程式代碼範例
- [手動] 選項 2:註冊並手動設定您的應用程式和程式代碼範例
選項 1:註冊並自動設定您的應用程式,然後下載您的程式代碼範例
- 移至 Microsoft Entra 系統管理中心 - 應用程式註冊快速入門體驗。
- 輸入應用程式的名稱,然後選取 [註冊] 。
- 請依照指示下載並自動設定新的應用程式,只要按一下即可。
選項 2:註冊並手動設定應用程式和程式碼範例
步驟 1:註冊您的應用程式
若要註冊您的應用程式,並手動將應用程式的註冊資訊新增至您的解決方案,請遵循下列步驟:
- 登入 Microsoft Entra 系統管理中心。
- 如果您有多個租使用者的存取權,請使用頂端功能表中的 [設定] 圖示
,切換至您想要從 [目錄 + 訂用帳戶] 功能表註冊應用程式的租使用者。
- 瀏覽至 [身分識別>應用程式>應用程式註冊],選取 [[新增註冊]。
- 輸入應用程式的 名稱,例如
Win-App-calling-MsGraph
。 您的應用程式使用者可能會看到此名稱,稍後您可以加以變更。 - 在 [支援的帳戶類型] 區段中,選取 [任何組織目錄的帳戶和個人 Microsoft 帳戶(例如 Skype、Xbox、Outlook.com)]。
- 選取 [[註冊] 以建立應用程式。
- 在 [管理] 下,選取 [驗證]。
- 選取 ,新增平台>,行動和桌面應用程式。
- 在 [重新導向 URI] 區段中,選取 [
https://login.microsoftonline.com/common/oauth2/nativeclient
],然後在 [自定義重新導向 URI] 中,新增ms-appx-web://microsoft.aad.brokerplugin/{client_id}
,其中{client_id}
是您的應用程式的用戶端識別碼(這與出現在 [msal{client_id}://auth
] 複選框中的 GUID 相同)。 - 選取 並設定。
步驟 2:下載專案
提示
若要避免 Windows 中路徑長度限制所造成的錯誤,建議您將封存盤或複製存放庫擷取到磁碟驅動器根附近的目錄。
步驟 3:設定專案
將 zip 檔案解壓縮到靠近磁碟根目錄的本機資料夾,例如,C:\Azure-Samples。
在 Visual Studio 中開啟專案。
編輯 App.Xaml.cs,並以下列程式代碼取代
ClientId
和Tenant
字段的值:private static string ClientId = "Enter_the_Application_Id_here"; private static string Tenant = "Enter_the_Tenant_Info_Here";
哪裡:
Enter_the_Application_Id_here
- 是您註冊之應用程式的 應用程式(用戶端)標識碼。若要尋找 應用程式 (用戶端) 識別碼的值,請移至 Microsoft Entra 系統管理中心的 [應用程式 概觀] 頁面。
Enter_the_Tenant_Info_Here
- 設定為下列其中一個選項:如果您的應用程式支援此組織目錄中的 帳戶,請將此值取代為 租使用者識別子 或 租使用者名稱 (例如,contoso.microsoft.com)
如果您的應用程式支援任何組織目錄中的 帳戶,請將此值取代為
organizations
如果您的應用程式支援任何組織目錄中的 帳戶和個人Microsoft帳戶,請將此值取代為
common
。若要尋找 Directory (tenant)識別碼 和 支援的帳戶類型的值,請移至 Microsoft Entra 系統管理中心的 [概觀] 頁面。
步驟 4:執行應用程式
若要在 Visual Studio 中建置和執行範例應用程式,請選取 [偵錯] 功能表,>[開始偵錯],或按 F5 鍵。 您的應用程式MainWindow隨即顯示。
當應用程式的主視窗出現時,請選取 [呼叫Microsoft圖形 API] 按鈕。 系統會提示您使用您的 Microsoft Entra 帳戶(公司或學校帳戶)或Microsoft帳戶 (live.com, outlook.com) 認證登入。
如果您第一次執行應用程式,系統會提示您同意允許應用程式存取使用者配置檔並登入。 同意要求的許可權之後,應用程式會顯示您已成功登入。 您應該會看到從呼叫 Microsoft Graph API 取得的一些基本令牌資訊和用戶數據。
詳細資訊
範例的運作方式
MSAL.NET
MSAL (Microsoft.Identity.Client)是一個用來讓使用者登入並請求用於存取受 Microsoft 身分識別平台保護之 API 的 token 的函式庫。 您可以在 Visual Studio 的 套件管理員主控台中執行下列命令來安裝 MSAL:
Install-Package Microsoft.Identity.Client -IncludePrerelease
MSAL 初始化
您可以透過新增下列程式碼來添加 MSAL 的參考:
using Microsoft.Identity.Client;
然後,使用下列程式代碼初始化 MSAL:
IPublicClientApplication publicClientApp = PublicClientApplicationBuilder.Create(ClientId)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
.Build();
哪裡: | 描述 |
---|---|
ClientId |
這是在 Microsoft Entra 系統管理中心註冊之應用程式的 應用程式(用戶端)標識碼。 您可以在 Microsoft Entra 系統管理中心的 [概觀] 頁面中,找到此值。 |
要求令牌
MSAL 有兩種方法可取得令牌:AcquireTokenInteractive
和 AcquireTokenSilent
。
以互動方式取得使用者令牌
在某些情況下,需要強制使用者透過彈出視窗與Microsoft身分識別平台互動,以驗證其認證或同意。 一些範例包括:
- 使用者第一次登入應用程式時
- 當使用者可能需要重新輸入其認證時,因為密碼已過期
- 當您的應用程式要求存取使用者需要同意的資源時
- 需要兩個要素驗證時
authResult = await app.AcquireTokenInteractive(_scopes)
.ExecuteAsync();
哪裡: | 描述 |
---|---|
_scopes |
包含所要求的範圍,例如Microsoft Graph 的 { "user.read" } 或自定義 Web API 的 { "api://<Application ID>/access_as_user" } 。 |
以靜默方式獲取使用者令牌
您不想要求使用者每次需要存取資源時驗證其認證。 您大部分時間都希望令牌取得和更新,而不需要任何用戶互動。 在使用初始 AcquireTokenInteractive
方法之後,您可以使用 AcquireTokenSilent
方法取得權杖,以存取受保護的資源。
var accounts = await app.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
authResult = await app.AcquireTokenSilent(scopes, firstAccount)
.ExecuteAsync();
哪裡: | 描述 |
---|---|
scopes |
包含所要求的範圍,例如Microsoft Graph 的 { "user.read" } 或自定義 Web API 的 { "api://<Application ID>/access_as_user" } 。 |
firstAccount |
指定快取中的第一個使用者 (MSAL 支援單一應用程式中的多個使用者)。 |
說明與支援
如果您需要協助、想要回報問題,或想要瞭解支援選項,請參閱 開發人員的說明和支援。
後續步驟
試用 Windows 桌面教學課程,以取得建置應用程式和新功能的完整逐步指南,包括本快速入門的完整說明。