在本地开发期间,应用程序需要向 Azure 进行身份验证才能访问各种 Azure 服务。 本地身份验证的两种常见方法是 使用服务主体 或使用开发人员帐户。 本文介绍如何使用开发人员帐户。 在前面的部分中,你将了解:
- 如何使用 Microsoft Entra 组有效地管理多个开发人员帐户的权限
- 如何将角色分配给开发人员帐户以限定权限
- 如何登录到受支持的本地开发工具
- 如何通过应用代码使用开发人员帐户进行身份验证
若要使用开发人员的 Azure 凭据在本地开发期间向 Azure 进行身份验证的应用,开发人员必须从以下开发人员工具之一登录到 Azure:
- Azure CLI
- Azure Developer CLI
- Azure PowerShell
- Visual Studio Code
Azure 标识库可以检测开发人员是否从其中一个工具登录。 然后,该库可通过工具获取 Microsoft Entra 访问令牌,以将应用作为登录用户向 Azure 进行身份验证。
此方法利用开发人员的现有 Azure 帐户来简化身份验证过程。 但是,开发人员帐户拥有的权限可能比应用需要的权限更多,因此超出了应用在生产环境中运行时使用的权限。 作为替代方法,可以创建在本地开发期间使用的应用程序服务主体,其权限范围仅限应用所需的访问权限。
创建用于本地开发的Microsoft Entra 组
创建Microsoft Entra 组来封装应用在本地开发中所需的角色(权限),而不是将角色分配给单个服务主体对象。 此方法具有以下优势:
- 每个开发人员在组级别都分配了相同的角色。
- 如果应用需要新角色,只需将角色添加到应用的组中。
- 如果新开发人员加入团队,则会为开发人员创建一个新的应用程序服务主体并将其添加到组中,确保开发人员有权处理应用。
将角色分配给组
接下来,确定您的应用在何种资源上需要哪些角色(权限),并将这些角色分配给您创建的 Microsoft Entra 组。 可以在资源、资源组或订阅范围内为组分配角色。 此示例演示如何在资源组范围内分配角色,因为大多数应用将其所有 Azure 资源分组到单个资源组中。
在 Azure 门户中,导航到包含应用的资源组的 “概述 ”页。
在左侧导航栏中,选择“访问控制(IAM)”。
在 “访问控制”(IAM) 页上,选择“ + 添加 ”,然后从下拉菜单中选择 “添加角色分配 ”。 “添加角色分配”页提供了多个选项卡来配置和分配角色。
在“ 角色 ”选项卡上,使用搜索框查找要分配的角色。 选择角色,然后选择“ 下一步”。
在“ 成员 ”选项卡上:
- 对于 “分配对值的访问权限 ”,请选择“ 用户”、“组”或服务主体 。
- 对于 “成员 ”值,选择 “+ 选择成员 ”以打开 “选择成员 ”浮出控件面板。
- 搜索之前创建的Microsoft Entra 组,并从筛选的结果中选择它。 选择 “选择” 以选择组并关闭浮动面板。
- 选择“成员”选项卡底部的“审阅 + 分配”。
在“ 审阅 + 分配 ”选项卡上,选择页面底部的 “审阅 + 分配 ”。
使用开发人员工具登录到 Azure
接下来,使用多个开发人员工具之一登录到 Azure,这些工具可用于在开发环境中执行身份验证。 进行身份验证的帐户也应该存在于前面创建并配置的 Microsoft Entra 组中。
开发人员可以使用 Azure CLI 进行身份验证以Microsoft Entra ID。 应用使用 DefaultAzureCredential 或 AzureCliCredential 随后可以使用此帐户在本地运行时对应用请求进行身份验证。
若要使用 Azure CLI 进行身份验证,请 az login 运行以下命令。 在具有默认 Web 浏览器的系统上,Azure CLI 启动浏览器以对用户进行身份验证。
az login
对于没有默认 Web 浏览器的系统,az login 命令使用设备代码身份验证流。 用户还可以强制 Azure CLI 使用设备代码流,而不是通过指定 --use-device-code 参数来启动浏览器。
az login --use-device-code
从应用向 Azure 服务进行身份验证
Azure 标识库提供各种凭据-适用于支持不同方案和Microsoft Entra 身份验证流的实现TokenCredential。 前面的步骤演示如何在本地使用用户帐户时使用 DefaultAzureCredential 。
实现代码
DefaultAzureCredential 是一个有意见的有序机制序列,用于对 Microsoft Entra ID 进行身份验证。 每个身份验证机制都是派生自 TokenCredential 类的类,称为 凭据。 在运行时,DefaultAzureCredential 尝试使用第一个凭据进行身份验证。 如果该凭据无法获取访问令牌,则会尝试序列中的下一个凭据,依此方式,直到成功获取访问令牌。 这样,你的应用可以在不同的环境中使用不同的凭据,而无需编写特定于环境的代码。
若要使用 DefaultAzureCredential,请将 @azure/标识 包添加到应用程序。 在所选终端中,导航到应用程序项目目录并运行以下命令:
npm install @azure/identity
Azure 服务使用各种 Azure SDK 客户端库中的专用客户端类进行访问。 应注册这些类和你自己的自定义服务,以便在整个应用中访问它们。 完成以下编程步骤以创建客户端类和 DefaultAzureCredential:
- 导入
@azure/identity包。 - 创建 Azure 服务客户端,并为其传入一个新的
DefaultAzureCredential实例。
import { DefaultAzureCredential } from "@azure/identity";
import { SomeAzureServiceClient } from "@azure/arm-some-service";
const client = new SomeAzureServiceClient(new DefaultAzureCredential());