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

以下快速入门使用代码示例,该示例演示如何通过将对 ASP.NET Web API 的访问权限限制为仅授权帐户来保护其资源。 该示例支持对个人 Microsoft 帐户和任何 Microsoft Entra 组织中的帐户进行授权。

本文还使用 Windows Presentation Foundation (WPF) 应用来演示如何请求访问令牌以访问 Web API。

先决条件

克隆或下载示例

可以通过两种方式获取代码示例:

  • 在 shell 或命令行中进行克隆:

    git clone https://github.com/AzureADQuickStarts/AppModelv2-NativeClient-DotNet.git
    
  • 以 ZIP 文件下载

提示

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

注册 Web API (TodoListService)

在 Azure 门户中的 应用注册 中注册您的 Web API。

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

  2. 如果您可以访问多个租户,请使用顶部菜单中的 设置 图标 ,切换到您要通过 目录 + 订阅 菜单注册应用程序的租户。

  3. 浏览至“标识”>“应用程序”>“应用注册”,选择“新建注册”

  4. 输入应用程序的 名称,例如 AppModelv2-NativeClient-DotNet-TodoListService。 应用的用户可能会看到此名称,稍后可以对其进行更改。

  5. 在“支持的帐户类型”下,选择“任何组织目录中的帐户”

  6. 选择 注册 以创建应用程序。

  7. 在应用 概述 页上,查找 应用程序(客户端)ID 值,然后将其记录以供以后使用。 你需要它来配置此项目的 Visual Studio 配置文件(即 文件中的 TodoListService\appsettings.js上的 ClientId)。

  8. 在“管理”下,选择“公开 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. 对于“状态”,保留“启用”
  9. 选择“添加范围”

配置服务项目

配置服务项目以匹配已注册的 Web API。

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

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

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

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

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

  2. 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 应用,请执行以下步骤:

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

  2. 浏览至“标识”>“应用程序”>“应用注册”,选择“新建注册”

  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 服务移动到列表中的第一个位置,确保首先启动 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.comhotmail.com 帐户)或工作或学校帐户登录。

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

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

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

帮助和支持

如果需要帮助、想要报告问题或想要了解支持选项,请参阅 帮助和支持开发人员

后续步骤

在以下教程系列中通过构建受保护的 ASP.NET Core Web API 来了解详细信息: