快速入门:调用受Microsoft标识平台保护的 Web API

适用于:带白色勾号的绿色圆圈。 员工租户 带白色勾号的绿色圆圈。 外部租户(了解详细信息

在本快速入门中,你将使用示例 Web 应用来演示如何使用Microsoft标识平台保护 ASP.NET Web API。 此示例使用 Microsoft身份验证库(MSAL) 来处理身份验证和授权。

先决条件

公开 API

注册 API 后,可以通过定义 API 向客户端应用程序公开的范围来配置其权限。 客户端应用程序通过将访问令牌及其请求传递到受保护的 Web API 来请求执行操作的权限。 然后,仅当 Web API 接收的访问令牌包含所需范围时,Web API 才会执行请求的操作。

  1. 管理下,选择公开 API>添加范围。 通过选择“保存并继续”来接受建议的应用程序 ID URI (api://{clientId}),然后输入以下信息:

    1. 对于范围名称,请输入access_as_user
    2. 对于“谁能同意?”,请确保选择了“管理员和用户”选项。
    3. 在“管理员同意显示名称”框中,输入 Access TodoListService as a user
    4. 在“管理员同意说明”框中,输入 Accesses the TodoListService web API as a user
    5. 在“用户同意显示名称”框中,输入 Access TodoListService as a user
    6. 在“用户同意说明”框中,输入 Accesses the TodoListService web API as a user
    7. 对于“状态”,保留“启用”
  2. 选择添加作用域

克隆或下载示例应用程序

若要获取示例应用程序,可以从 GitHub 克隆它或将其下载为 .zip 文件。

git clone https://github.com/AzureADQuickStarts/AppModelv2-NativeClient-DotNet.git

小窍门

若要避免由于 Windows 中路径长度限制导致的错误,我们建议将存档提取或克隆到驱动器根目录附近的目录中。

配置示例应用程序

配置代码示例以匹配已注册的 Web API。

  1. 在 Visual Studio 中打开解决方案,然后在 TodoListService 项目的根目录下打开 appsettings.json 文件。

  2. Enter_the_Application_Id_here 的值替换为在“应用注册”门户中的 ClientID 参数中注册的应用程序中的客户端 ID(应用程序 ID)值Audience

将新范围添加到 app.config 文件

若要将新范围添加到 TodoListClient app.config 文件,请执行以下步骤:

  1. 在 TodoListClient 项目根文件夹中,打开 app.config 文件。

  2. 将你为 TodoListService 项目注册的应用程序的 ID 粘贴到 TodoListServiceScope 参数中,替换 {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)

在 Microsoft Entra 管理中心 的应用注册 中注册 TodoListClient 应用,然后在 TodoListClient 项目中配置代码。 如果客户端和服务器被视为同一应用程序,则可以重复使用在步骤 2 中注册的应用程序。 如果希望用户使用 Microsoft 个人帐户登录,则可使用相同的应用程序。

注册应用

若要注册 TodoListClient 应用,请执行以下步骤:

  1. 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心

  2. 浏览到 Entra ID>应用注册 并选择“ 新建注册”。

  3. 选择“新注册”

  4. “注册应用程序”页出现后,请输入应用程序的注册信息:

    1. 名称 部分中,输入一个有意义的应用程序名称,该名称将显示给应用的用户(例如,NativeClient-DotNet-TodoListClient)。
    2. 在“支持的帐户类型”下,选择“任何组织目录中的帐户” 。
    3. 选择“注册”以创建应用程序。

    注释

    在 TodoListClient 项目 app.config 文件中,ida:Tenant 的默认值设置为 common。 可能的值为:

    • common:可以使用工作或学校帐户或 Microsoft 个人帐户登录(因为你在上一步中选择了“任何组织目录中的帐户”)。
    • organizations:可使用工作或学校帐户登录。
    • consumers:只能使用 Microsoft 个人帐户登录。
  5. 在应用 概述 页上,选择 身份验证,然后完成以下步骤以添加平台:

    1. 在“平台配置”下,选择“添加平台”按钮 。
    2. 对于 移动和桌面应用程序,请选择 移动和桌面应用程序
    3. 对于“重定向 URI”,请选择 复选框。https://login.microsoftonline.com/common/oauth2/nativeclient
    4. 选择配置
  6. 选择“API 权限”,然后完成以下步骤以添加权限:

    1. 选择“添加权限”按钮。
    2. 选择“我的 API”选项卡。
    3. 在 API 列表中,选择 AppModelv2-NativeClient-DotNet-TodoListService API 或选择您为 Web API 输入的名称。
    4. 如果"access_as_user"权限框未选中,请选中它。 如有必要,请使用“搜索”框。
    5. 选择“添加权限”按钮。

配置您的项目

通过将应用程序 ID 添加到 app.config 文件来配置 TodoListClient 项目。

  1. 在“应用注册门户”的“概述”页中,复制“应用程序(客户端) ID”的值 。

  2. 从 TodoListClient 项目根文件夹打开 app.config 文件,然后将应用程序 ID 值粘贴到 ida:ClientId 参数中。

运行示例应用程序

启动这两个项目。 对于 Visual Studio 用户;

  1. 右键单击 Visual Studio 解决方案,然后选择“属性”

  2. “通用属性”中,选择“ 启动项目 ”,然后选择 “多个启动项目”。

  3. 对于这两个项目,请选择“启动”作为操作

  4. 请使用向上箭头将 TodoListService 服务移动到列表中的第一个位置,以确保先启动该服务。

登录以运行 TodoListClient 项目。

  1. 按 F5 启动项目。 服务页面和桌面应用程序同时打开。

  2. 在 TodoListClient 中,选择右上角的“登录”,然后使用注册应用程序时所用的同一凭据登录,或以同一目录中的用户身份登录。

    如果首次登录,系统可能会提示你同意 TodoListService Web API。

    为了帮助你访问 TodoListService Web API 并操作 待办事项 列表,登录还请求访问 access_as_user 作用域的访问令牌。

为客户端应用程序预先授权

可以允许其他目录中的用户访问 Web API,方法是预先授权客户端应用程序访问 Web API。 为此,请将来自客户端应用的应用程序 ID 添加到你的 Web API 的预授权应用列表中。 通过添加预授权客户端,你可以允许用户访问 Web API,而无需提供同意。

  1. 在“应用注册”门户中,打开 TodoListService 应用的属性。
  2. 在“公开 API”部分的“授权客户端应用程序”下,选择“添加客户端应用程序
  3. 在“客户端 ID”框中,粘贴 TodoListClient 应用的应用程序 ID。
  4. 授权范围 部分中,选择 api://<Application ID>/access_as_user Web API 的范围。
  5. 选择添加应用程序

开始运行项目

  1. F5 运行项目。 您的 TodoListClient 应用打开了。
  2. 选择右上角的“登录”,然后使用 Microsoft 个人帐户(例如 live.com 或 hotmail.com 帐户)或工作或学校帐户登录 。

可选:限制特定用户的登录访问权限

默认情况下,任何个人帐户(例如 outlook.comlive.com 帐户)或与 Microsoft Entra ID 集成的组织的工作或学校帐户都可以请求令牌并访问 Web API。

若要通过更改 TenantId 文件中 属性来指定谁可以登录到应用程序。

后续步骤

了解如何使用Microsoft标识平台保护 ASP.NET Core Web API。