快速入门:调用受Microsoft标识平台保护的 ASP.NET Web API
以下快速入门使用代码示例,该示例演示如何通过将对 ASP.NET Web API 的访问权限限制为仅授权帐户来保护其资源。 该示例支持对个人 Microsoft 帐户和任何 Microsoft Entra 组织中的帐户进行授权。
本文还使用 Windows Presentation Foundation (WPF) 应用来演示如何请求访问令牌以访问 Web API。
先决条件
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- Visual Studio 2022。 免费下载 Visual Studio。
克隆或下载示例
可以通过两种方式获取代码示例:
在 shell 或命令行中进行克隆:
git clone https://github.com/AzureADQuickStarts/AppModelv2-NativeClient-DotNet.git
提示
为了避免 Windows 中路径长度限制导致的错误,建议将存档或克隆存储库提取到驱动器根附近的目录中。
注册 Web API (TodoListService)
在 Azure 门户中的 应用注册 中注册您的 Web API。
以至少 云应用程序管理员身份登录到 Microsoft Entra 管理中心。
如果您可以访问多个租户,请使用顶部菜单中的 设置 图标
,切换到您要通过 目录 + 订阅 菜单注册应用程序的租户。
浏览至“标识”>“应用程序”>“应用注册”,选择“新建注册”。
输入应用程序的 名称,例如
AppModelv2-NativeClient-DotNet-TodoListService
。 应用的用户可能会看到此名称,稍后可以对其进行更改。在“支持的帐户类型”下,选择“任何组织目录中的帐户”。
选择 注册 以创建应用程序。
在应用 概述 页上,查找 应用程序(客户端)ID 值,然后将其记录以供以后使用。 你需要它来配置此项目的 Visual Studio 配置文件(即 文件中的 TodoListService\appsettings.js上的
ClientId
)。在“管理”下,选择“公开 API>添加范围”。 通过选择“保存并继续”来接受建议的应用程序 ID URI (
api://{clientId}
),然后输入以下信息:- 对于“范围名称”,输入
access_as_user
。 - 对于“谁能同意?”,请确保选择了“管理员和用户”选项。
- 在“管理员同意显示名称”框中,输入
Access TodoListService as a user
。 - 在 管理员同意说明 框中,输入
Accesses the TodoListService web API as a user
。 - 在 用户同意显示名称 框中,输入
Access TodoListService as a user
。 - 在 用户同意说明 框中,输入
Accesses the TodoListService web API as a user
。 - 对于“状态”,保留“启用”。
- 对于“范围名称”,输入
选择“添加范围”。
配置服务项目
配置服务项目以匹配已注册的 Web API。
在 Visual Studio 中打开解决方案,然后在 TodoListService 项目的根目录下打开 appsettings.json 文件。
将
Enter_the_Application_Id_here
的值替换为在“应用注册”门户中的ClientID
和Audience
参数中注册的应用程序中的客户端 ID(应用程序 ID)值。
将新范围添加到 app.config 文件
若要将新范围添加到 TodoListClient app.config 文件,请执行以下步骤:
在 TodoListClient 项目根文件夹中,打开 app.config 文件。
在
TodoListServiceScope
参数中粘贴为 TodoListService 项目注册的应用程序 ID,替换{Enter the Application ID of your TodoListService from the app registration portal}
字符串。
注意
确保应用程序 ID 使用以下格式:api://{TodoListService-Application-ID}/access_as_user
(其中 {TodoListService-Application-ID}
是表示 TodoListService 应用的应用程序 ID 的 GUID)。
注册 Web 应用 (TodoListClient)
在 Azure 门户中 应用注册 注册 TodoListClient 应用,然后在 TodoListClient 项目中配置代码。 如果客户端和服务器被视为同一应用程序,则可以重复使用在步骤 2 中注册的应用程序。 如果希望用户使用个人Microsoft帐户登录,请使用同一应用程序。
注册应用
若要注册 TodoListClient 应用,请执行以下步骤:
以至少 云应用程序管理员身份登录到 Microsoft Entra 管理中心。
浏览至“标识”>“应用程序”>“应用注册”,选择“新建注册”。
选择“新注册”。
“注册应用程序”页 打开时,输入应用程序的注册信息:
- 在 名称 部分中,输入一个有意义的应用程序名称,该名称将显示给应用的用户(例如,NativeClient-DotNet-TodoListClient)。
- 在“支持的帐户类型”下,选择“任何组织目录中的帐户”。
- 选择 注册 以创建应用程序。
注意
在 TodoListClient 项目 app.config 文件中,
ida:Tenant
的默认值设置为common
。 可能的值包括:common
:可以使用工作或学校帐户或个人Microsoft帐户登录(因为你在上一步骤中选择了任何组织目录中 帐户)。organizations
:可以使用工作或学校帐户登录。consumers
:只能使用Microsoft个人帐户登录。
在应用 概述 页上,选择 身份验证,然后完成以下步骤以添加平台:
- 在 平台配置下,选择“添加平台”按钮 。
- 对于 移动和桌面应用程序,请选择 移动和桌面应用程序。
- 对于“重定向 URI”,请选择
https://login.microsoftonline.com/common/oauth2/nativeclient
复选框。 - 选择 配置。
选择“API 权限”,然后完成以下步骤以添加权限:
- 选择“添加权限”按钮。
- 选择 我的 API 选项卡。
- 在 API 列表中,选择 AppModelv2-NativeClient-DotNet-TodoListService API 或为 Web API 输入的名称。
- 如果“access_as_user”权限复选框未处于选中状态,请将其选中。 如有必要,请使用“搜索”框。
- 选择“添加权限”按钮。
配置您的项目
通过将应用程序 ID 添加到 app.config 文件来配置 TodoListClient 项目。
在 应用注册 门户中,在 概述 页上,复制 应用程序(客户端)ID的值。
从 TodoListClient 项目根文件夹打开 app.config 文件,然后将应用程序 ID 值粘贴到
ida:ClientId
参数中。
运行项目
启动这两个项目。 对于 Visual Studio 用户;
右键单击 Visual Studio 解决方案并选择 属性
在“通用属性”中,选择“启动项目”,然后选择“多启动项目”。
对于这两个项目,选择“启动”作为操作
使用向上箭头将 TodoListService 服务移动到列表中的第一个位置,确保首先启动 TodoListService 服务。
登录以运行 TodoListClient 项目。
按 F5 启动项目。 服务页面和桌面应用程序同时打开。
在 TodoListClient 的右上角,选择 登录,然后使用用于注册应用程序的相同凭据登录,或以同一目录中的用户身份登录。
如果首次登录,系统可能会提示你同意 TodoListService Web API。
为了帮助你访问 TodoListService Web API 并操作 待办事项 列表,登录还请求访问 access_as_user 作用域的访问令牌。
对客户端应用程序进行预授权
可以通过预先授权客户端应用程序访问 Web API,允许来自其他目录的用户访问 Web API。 为此,请将客户端应用的应用程序 ID 添加到 Web API 的预授权应用程序列表中。 通过添加预先授权的客户端,你可以允许用户访问 Web API,而无需提供许可。
- 在“应用注册”门户中,打开 TodoListService 应用的属性。
- 在“公开 API”部分的“授权客户端应用程序”下,选择“添加客户端应用程序。
- 在 客户端 ID 框中,粘贴 TodoListClient 应用的应用程序 ID。
- 在 授权范围 部分中,选择
api://<Application ID>/access_as_user
Web API 的范围。 - 选择“添加应用程序”。
运行项目
- 按 F5 运行项目。 随即会打开 TodoListClient 应用。
- 在右上角,选择 登录,然后使用个人Microsoft帐户(例如 live.com 或 hotmail.com 帐户)或工作或学校帐户登录。
可选:限制特定用户的登录访问权限
默认情况下,任何个人帐户(例如 outlook.com 或 live.com 帐户)或与 Microsoft Entra ID 集成的组织的工作或学校帐户都可以请求令牌并访问 Web API。
若要通过更改 appsettings.json 文件中 TenantId
属性来指定谁可以登录到应用程序。
帮助和支持
如果需要帮助、想要报告问题或想要了解支持选项,请参阅 帮助和支持开发人员。
后续步骤
在以下教程系列中通过构建受保护的 ASP.NET Core Web API 来了解详细信息: