快速入门:获取令牌并从 Windows 桌面应用程序调用 Microsoft Graph API
欢迎使用! 这可能不是你期望看到的页面。 在修复时,此链接应会将你转至正确的文章:
对于因此而造成的不便,我们深表歉意。感谢你的耐心等待,我们正在努力解决此问题。
在本快速入门中,你将下载并运行一个代码示例,该示例演示 Windows Presentation Foundation (WPF) 应用程序如何让用户登录并获取访问令牌来调用 Microsoft Graph API。
有关说明,请参阅示例工作原理。
步骤 1:在 Azure 门户中配置应用程序
为使此快速入门中的代码示例正常运行,请添加重定向 URI https://login.microsoftonline.com/common/oauth2/nativeclient
和 ms-appx-web://microsoft.aad.brokerplugin/{client_id}
。
应用程序已使用这些属性进行配置。
步骤 2:下载 Visual Studio 项目
使用 Visual Studio 2019 运行项目。
提示
若要避免由于 Windows 中路径长度限制导致的错误,我们建议将存档提取或克隆到驱动器根目录附近的目录中。
步骤 3:应用已配置并可以运行
我们已经为项目配置了应用属性的值,并且该项目已准备好运行。
注意
Enter_the_Supported_Account_Info_Here
详细信息
示例工作原理
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 |
是在 Azure 门户中注册的应用程序的应用程序(客户端) ID。 可以在 Azure 门户的应用的“概览”页中找到此值。 |
请求令牌
MSAL 有两种获取令牌的方法:AcquireTokenInteractive
和 AcquireTokenSilent
。
以交互方式获取用户令牌
在某些情况下,需要强制用户通过弹出窗口来与 Microsoft 标识平台进行交互,以验证其凭据或授予同意。 示例包括:
- 用户首次登录应用程序
- 由于密码已过期,用户可能需要重新输入凭据的情况
- 应用程序正在请求访问用户需要同意的资源的情况
- 需要双重身份验证的情况
authResult = await App.PublicClientApp.AcquireTokenInteractive(_scopes)
.ExecuteAsync();
其中: | 说明 |
---|---|
_scopes |
包含所请求的范围,例如 { "user.read" } (针对 Microsoft Graph)或 { "api://<Application ID>/access_as_user" } (针对自定义 Web API)。 |
以无提示方式获取用户令牌
你不希望在用户每次需要访问资源时都要求其验证其凭据。 大多数情况下,你希望在无需任何用户交互的情况下进行令牌获取和续订。 可以使用 AcquireTokenSilent
方法获取令牌,以在初始 AcquireTokenInteractive
方法后访问受保护资源:
var accounts = await App.PublicClientApp.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
authResult = await App.PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
.ExecuteAsync();
其中: | 说明 |
---|---|
scopes |
包含所请求的范围,例如 { "user.read" } (针对 Microsoft Graph)或 { "api://<Application ID>/access_as_user" } (针对自定义 Web API)。 |
firstAccount |
指定缓存中的第一个用户(MSAL 支持单个应用中的多个用户)。 |
帮助和支持
如果需要帮助、需要报告问题,或者需要详细了解支持选项,请参阅面向开发人员的帮助和支持。
后续步骤
试用 Windows 桌面教程,了解有关构建应用程序和新功能的完整分布指南,包括本快速入门的完整说明。