在本操作指南中,你将使用 Microsoft 身份验证平台注册 Web API,并通过添加访问权限范围向客户端应用开放它。 通过注册 Web API 并通过范围将其公开,分配所有者和应用角色,你可以向可访问 API 的已授权用户和客户端应用提供对其资源的基于权限的访问权限。
- 拥有有效订阅的 Azure 帐户。 如果没有帐户,请创建一个帐户。
- 在 Microsoft Entra 管理中心注册的应用程序。 如果没有应用程序, 请立即注册应用程序。
访问 API 需要配置访问范围和角色。 如果想要将资源应用程序 Web API 公开至客户端应用程序,请为 API 配置访问作用域和访问角色。 如果想要让客户端应用程序访问 Web API,请配置权限以访问应用注册中的 API。 若要提供对 Web API 中资源的范围访问权限,首先需要向 Microsoft 标识平台注册该 API。
- 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心。
- 如果有权访问多个租户,请使用顶部菜单中的“设置”图标
,从“目录 + 订阅”菜单切换到包含应用注册的租户。
- 执行注册应用程序中的步骤并跳过重定向 URI(可选)部分的步骤。 无需为 Web API 配置重定向 URI,因为没有用户以交互方式进行登录。
- 在应用注册中的“管理”下,选择“所有者”,然后选择“添加所有者”。
- 在新窗口中,找到并选择要分配给应用程序的所有者。 所选所有者将显示在右侧面板中。 完成后,通过“选择”进行确认。 应用所有者现在将显示在所有者列表中。
备注
确保将所有者分配给要向其添加权限的 API 应用程序和应用程序,否则请求 API 权限时不会列出该 API。
在应用注册的“管理”下,选择“应用角色”和“创建应用角色”。
接下来,在“创建应用角色”窗格中指定应用角色的属性。 对于本演练,你可以使用示例值或指定自己的值。
字段 说明 示例 显示名称 应用角色的名称 员工记录 允许的成员类型 指定是否可以将应用角色分配给用户/组和/或应用程序 应用程序 值 令牌的“角色”声明中显示的值 Employee.Records
描述 应用角色的更详细说明。 应用程序有权访问员工记录 选中该复选框以启用应用角色,然后选择应用。
注册 Web API、分配应用角色和所有者后,可以将范围添加到 API 的代码,以便它向使用者提供精细权限。
客户端应用程序中的代码通过将访问令牌及其请求传递到受保护的资源 (Web API) 来请求执行由 Web API 定义的操作的权限。 然后,仅当 Web API 接收的访问令牌包含操作所需的范围时,Web API 才会执行请求的操作。
首先,请按照以下步骤创建一个名为 Employees.Read.All
的示例范围:
选择公开 API。
在页面顶部,选择“应用程序 ID URI”旁边的“添加”。 这默认为
api://<application-client-id>
。 应用 ID URI 充当你将在 API 代码中引用的范围的前缀,它必须是全局唯一的。 选择“保存”。选择“添加范围”:
接下来,在“添加范围”窗格中指定范围的属性。 对于本演练,你可以使用示例值或指定自己的值。
字段 说明 示例 范围名称 范围的名称。 常用的范围命名约定为 resource.operation.constraint
。Employees.Read.All
谁可以许可 此范围是由用户同意,还是由管理员同意。 管理员应仅用于高特权权限。 管理员和用户 管理员许可显示名称 仅管理员可以看到的范围用途的简短说明。 对“员工记录”的只读访问权限 管理员许可说明 仅管理员可以看到的范围所授予权限的更详细说明。 允许应用程序对所有“员工数据”具有只读访问权限。 用户许可显示名称 范围用途的简短说明。 仅当你将“谁可以同意”设置为“管理员和用户”时才向用户显示 。 “员工记录”的只读访问权限 用户许可说明 范围所授予权限的更详细说明。 仅当你将“谁可以同意”设置为“管理员和用户”时才向用户显示 。 允许应用程序对你的“员工数据”具有只读访问权限。 州 范围是启用或禁用的。 已启用 选择“添加作用域”。
(可选)若要取消向应用用户提示同意你定义的范围,可以预授权客户端应用程序访问 Web API。 请仅预授权所信任的客户端应用程序,因为用户不会有机会拒绝同意。
- 在 “授权客户端应用程序”下,选择“ 添加客户端应用程序”。
- 输入要预授权的客户端应用程序的“应用程序(客户端) ID”。 例如,以前注册的 Web 应用程序的 ID。
- 在“授权的范围”下,选择要取消显示许可提示的范围,然后选择“添加应用程序”。
如果遵循此可选步骤,则客户端应用现在是预授权的客户端应用 (PCA),系统在用户登录时不会提示用户同意。
接下来,添加另一个名为 Employees.Write.All
的示例范围,只有管理员才能同意该范围。 需要管理员同意的范围通常用于提供对更高特权的操作的访问权限,并且通常由作为后端服务运行的客户端应用程序或不以交互方式登录用户的后台程序使用。
若要添加 Employees.Write.All
示例范围,请按照 添加范围 部分中的步骤进行操作,并在“添加范围”窗格中指定以下值。 完成后,选择添加范围:
字段 | 示例值 |
---|---|
范围名称 | Employees.Write.All |
谁可以许可 | 仅管理员 |
管理员许可显示名称 | “员工记录”的写入访问权限 |
管理员许可说明 | 允许应用程序对所有“员工数据”具有写入访问权限。 |
用户许可显示名称 | 无(留空) |
用户许可说明 | 无(留空) |
州 | 已启用 |
如果你已成功添加先前部分中所介绍的两个示例范围,它们将显示在 Web API 的应用注册的“公开 API”窗格中,如以下图片所示:
范围的完整字符串由 Web API 的“应用程序 ID URI”与范围的“范围名称”串联而成。 例如,如果 Web API 的应用程序 ID URI 为 https://contoso.com/api
,范围名称为 Employees.Read.All
,则完整范围为:
https://contoso.com/api/Employees.Read.All
在本系列的下一篇文章中,你将按照本文中的步骤配置客户端应用的注册,其中包含对 Web API 的访问权限和你所定义的范围。
向客户端应用注册授予访问 Web API 的权限后,标识平台可以向客户端颁发 OAuth 2.0 访问令牌。 当客户端调用 Web API 时,它会提供一个访问令牌,令牌的范围 (scp
) 声明设置为你在客户端的应用注册中所指定的权限。
以后可以根据需要公开其他范围。 请考虑 Web API 可以公开与多个操作关联的多个范围。 在运行时,资源可以通过评估其收到的 OAuth 2.0 访问令牌中的范围 (scp
) 声明,来控制对 Web API 的访问。
现在,你已通过配置 Web API 范围对其进行了公开,请使用访问范围的权限来配置客户端应用的注册。