使用开发人员帐户在本地开发期间向 Azure 服务验证 JavaScript 应用
创建云应用程序时,开发人员需要在其本地工作站上调试和测试应用程序。 在本地开发期间,当应用程序在开发人员的工作站上运行时,它仍然必须向应用使用的任何 Azure 服务进行身份验证。 本文介绍如何在本地开发期间使用开发人员的 Azure 凭据对访问 Azure 的应用进行身份验证。
要使应用在使用开发人员的 Azure 凭据进行本地开发期间向 Azure 进行身份验证,开发人员必须从 Visual Studio Code Azure 工具扩展、Azure CLI 或 Azure PowerShell 登录到 Azure。 Azure SDK for JavaScript 能够检测开发人员是否从其中一个工具登录,然后从凭据缓存中获取必要的凭据,以将应用作为登录用户向 Azure 进行身份验证。
这种方法对于开发团队而言最容易设置,因为它利用开发人员的现有 Azure 帐户。 但是,开发人员的帐户可能比应用程序所需的权限更多,因此超出了应用在生产环境中运行的权限。 作为替代方法,可以创建在本地开发期间使用的应用程序服务主体,其权限范围仅限应用所需的访问权限。
1 - 为本地开发创建 Microsoft Entra 组
由于几乎总是有多个开发人员在应用程序中工作,因此建议先创建一个Microsoft Entra 组来封装应用在本地开发中所需的角色(权限)。 这种做法的优势如下。
- 由于角色是在组级别分配的,因此可以确保为每个开发人员分配相同的角色。
- 如果应用需要新角色,则只需将其添加到应用的 Microsoft Entra 组即可。
- 如果新的开发人员加入团队,只需将他们添加到正确的 Microsoft Entra 组,他们即可获得处理应用程序的正确权限。
如果开发团队已有一个 Microsoft Entra 组,则你可以使用该组。 否则,请完成以下步骤来创建 Microsoft Entra 组。
2 - 将角色分配给 Microsoft Entra 组
接下来,需要确定应用在哪些资源上需要哪些角色(权限),并将这些角色分配到应用。 在此示例中,角色将分配给在步骤 1 中创建的 Microsoft Entra 组。 可以在资源、资源组或订阅范围分配角色。 此示例演示如何在资源组范围分配角色,因为大多数应用程序将其所有 Azure 资源分组到单个资源组中。
3 - 使用 VS Code、Azure CLI 或 Azure PowerShell 登录到 Azure
在开发人员工作站上打开终端,然后从 Azure PowerShell 登录到 Azure。
Connect-AzAccount
4 - 在应用程序中实现 DefaultAzureCredential
若要向 Azure 对 Azure SDK 客户端对象进行身份验证,应用程序应使用 @azure/identity
包中的 DefaultAzureCredential
类。 在此方案中, DefaultAzureCredential
将按顺序检查开发人员是否已使用 VS Code Azure 工具扩展、Azure CLI 或 Azure PowerShell 登录到 Azure。 如果开发人员使用其中任何工具登录到 Azure,则用于登录该工具的凭据将由应用用来向 Azure 进行身份验证。
首先将 @azure/标识 包添加到应用程序。
npm install @azure/identity
接下来,对于在应用中创建 Azure SDK 客户端对象的任何 JavaScript 代码,你需要:
- 从
@azure/identity
模块中导入DefaultAzureCredential
类。 - 创建
DefaultAzureCredential
对象。 - 将
DefaultAzureCredential
对象传递给 Azure SDK 客户端对象构造函数。
以下代码片段中显示了此操作的示例。
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
// Acquire a credential object
const tokenCredential = DefaultAzureCredential();
const blobServiceClient = BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
tokenCredential
);
DefaultAzureCredential
将自动检测为应用配置的身份验证机制,并获取必要的令牌,以便向 Azure 对应用进行身份验证。 如果应用程序使用多个 SDK 客户端,则同一凭据对象可与每个 SDK 客户端对象一起使用。