快速入门:在 Windows 桌面应用中登录用户并调用 Microsoft Graph

在本快速入门中,你将下载并运行代码示例,该示例演示 Windows Presentation Foundation (WPF) 应用程序如何登录用户并获取访问令牌来调用Microsoft图形 API。 您构建的桌面应用程序使用授权代码流,并与代码交换证明密钥(PKCE)标准配对。

有关说明,请参阅示例工作原理

先决条件

注册并下载快速入门应用

您有两个选项来启动快速启动应用程序:

选项 1:注册并自动配置应用,然后下载代码示例

  1. 转到 Microsoft Entra 管理中心 - 应用注册快速启动体验。
  2. 输入应用程序的名称,然后选择 注册
  3. 按照说明下载并自动配置新应用程序,只需单击一下即可。

选项 2:注册并手动配置应用程序和代码示例

步骤 1:注册应用程序

若要注册应用程序并将应用的注册信息手动添加到解决方案,请执行以下步骤:

  1. 登录 Microsoft Entra 管理中心
  2. 如果你有权访问多个租户,请使用顶部菜单中的“设置”图标 ,通过“目录 + 订阅”菜单切换到你希望在其中注册应用程序的租户。
  3. 浏览至“标识”>“应用程序”>“应用注册”,然后选择“新建注册”
  4. 输入应用程序的 名称,例如 Win-App-calling-MsGraph。 应用的用户可能会看到此名称,稍后可以对其进行更改。
  5. 支持的帐户类型 部分中,选择 任意组织目录中的帐户和个人 Microsoft 帐户(例如 Skype、Xbox、Outlook.com)
  6. 选择 注册 以创建应用程序。
  7. 管理下,选择 身份验证
  8. 选择“添加平台>移动和桌面应用程序
  9. 在“重定向 URI”部分中,选择 https://login.microsoftonline.com/common/oauth2/nativeclient 并在 自定义重定向 URI 添加 ms-appx-web://microsoft.aad.brokerplugin/{client_id},其中 {client_id} 是应用程序的应用程序(客户端)ID(msal{client_id}://auth 复选框中显示的相同 GUID)。
  10. 选择 配置

步骤 2:下载项目

下载 WPF 示例应用程序

提示

为了避免 Windows 中路径长度限制导致的错误,建议将存档或克隆存储库提取到驱动器根附近的目录中。

步骤 3:配置项目

  1. 将 zip 文件解压缩到靠近磁盘根目录的本地文件夹,例如,C:\Azure-Samples

  2. 在 Visual Studio 中打开项目。

  3. 编辑 App.Xaml.cs,并将字段 ClientIdTenant 的值替换为以下代码:

    private static string ClientId = "Enter_the_Application_Id_here";
    private static string Tenant = "Enter_the_Tenant_Info_Here";
    

哪里:

  • Enter_the_Application_Id_here - 是已注册应用程序的 应用程序(客户端)ID

    若要查找 应用程序(客户端)ID的值,请转到Microsoft Entra 管理中心中的应用 概述 页。

  • Enter_the_Tenant_Info_Here - 设置为以下选项之一:

    • 如果应用程序支持此组织目录中的 帐户,请将此值替换为 租户 ID租户名称(例如,contoso.microsoft.com)

    • 如果您的应用程序支持任何组织目录中的 帐户,请将此值替换为 organizations

    • 如果应用支持“任何组织目录中的帐户和个人 Microsoft 帐户”,请将此值替换为“common

      若要查找 目录(租户)ID支持的帐户类型的值,请转到Microsoft Entra 管理中心中的应用 概述 页。

步骤 4:运行应用程序

若要在 Visual Studio 中生成和运行示例应用程序,请选择 “调试”菜单>“开始调试”,或按 F5 键。 将显示应用程序的 MainWindow。

当应用的主窗口出现时,选择“调用 Microsoft Graph API 的按钮”。 系统将提示你使用 Microsoft Entra 帐户(工作或学校帐户)或Microsoft帐户(live.com、outlook.com)凭据登录。

如果首次运行应用程序,系统会提示你提供许可,以允许应用程序访问用户配置文件并登录。 同意请求的权限后,应用程序会显示已成功登录。 您应该会看到从调用 Microsoft Graph API 中获取的一些基本令牌信息和用户数据。

详细信息

示例的工作原理

显示由本快速入门生成的示例应用工作原理的示意图。

MSAL.NET

MSAL(Microsoft.Identity.Client)是用于登录用户和请求令牌的库,用于访问受Microsoft标识平台保护的 API。 可以通过在 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 管理中心中注册的“应用程序(客户端)ID”。 可以在 Microsoft Entra 管理中心中应用的“概述”页上找到此值

请求令牌

MSAL 有两种获取令牌的方法:AcquireTokenInteractiveAcquireTokenSilent

以交互方式获取用户令牌

在某些情况下,需要强制用户通过弹出窗口与Microsoft标识平台交互,以验证其凭据或授予许可。 一些示例包括:

  • 用户首次登录应用程序时
  • 用户可能需要重新输入其凭据时,因为密码已过期
  • 当应用程序请求访问用户需要同意的资源时
  • 需要双重身份验证时
authResult = await app.AcquireTokenInteractive(_scopes)
                                      .ExecuteAsync();
哪里: 描述
_scopes 包含所请求的范围,例如Microsoft Graph 的 { "user.read" } 或自定义 Web API 的 { "api://<Application ID>/access_as_user" }

以无提示方式获取用户令牌

你不希望用户每次需要访问资源时都验证其凭据。 大多数时候,你希望令牌获取和续订,而无需任何用户交互。 可以使用 AcquireTokenSilent 方法获取令牌,以在初始 AcquireTokenInteractive 方法之后访问受保护的资源:

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 桌面教程,获取有关生成应用程序和新功能的完整分步指南,包括本快速入门的完整说明。