快速入门:在 Windows 桌面应用中登录用户并调用 Microsoft Graph
在本快速入门中,你将下载并运行代码示例,该示例演示 Windows Presentation Foundation (WPF) 应用程序如何登录用户并获取访问令牌来调用Microsoft图形 API。 您构建的桌面应用程序使用授权代码流,并与代码交换证明密钥(PKCE)标准配对。
有关说明,请参阅示例工作原理。
先决条件
- 安装了通用 Windows 平台开发工作负载的 Visual Studio
注册并下载快速入门应用
您有两个选项来启动快速启动应用程序:
- [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}
是应用程序的应用程序(客户端)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
- 是已注册应用程序的 应用程序(客户端)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 有两种获取令牌的方法:AcquireTokenInteractive
和 AcquireTokenSilent
。
以交互方式获取用户令牌
在某些情况下,需要强制用户通过弹出窗口与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 桌面教程,获取有关生成应用程序和新功能的完整分步指南,包括本快速入门的完整说明。