从本地 JavaScript 应用对 Azure 资源进行身份验证
在 Azure 外部运行的应用(例如,在本地或第三方数据中心)在访问 Azure 资源时应使用应用程序服务主体向 Azure 进行身份验证。 应用程序服务主体对象是使用 Azure 中的应用注册过程创建的。 创建应用程序服务主体时,将为应用生成客户端 ID 和客户端机密。 将客户端 ID、客户端机密和租户 ID 存储在环境变量中,以便 用于 JavaScript 的 Azure SDK 在运行时使用环境变量对应用进行 Azure 身份验证。
应为运行应用的每个环境(例如测试、阶段、生产)创建不同的应用注册。 这允许为每个服务主体配置特定于环境的资源权限,并确保部署到一个环境的应用不会与属于另一个环境的 Azure 资源通信。
1 - 在 Azure 中注册应用程序
可以使用 Azure 门户或 Azure CLI 向 Azure 注册应用。
登录到 Azure 门户并执行以下步骤。
2 - 将角色分配到应用程序服务主体
接下来,需要确定应用在哪些资源上需要哪些角色(权限),并将这些角色分配到应用。 可以在资源、资源组或订阅范围分配角色。 此示例演示如何在资源组范围为服务主体分配角色,因为大多数应用程序将其所有 Azure 资源分组到单个资源组中。
3 - 为应用程序配置环境变量
必须为运行 JavaScript 应用的进程设置环境变量 AZURE_CLIENT_ID
、AZURE_TENANT_ID
和 AZURE_CLIENT_SECRET
,以使应用程序服务主体凭据在运行时可供应用使用。 DefaultAzureCredential
对象在这些环境变量中查找服务主体信息。
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
4 - 在应用程序中实现 DefaultAzureCredential
若要向 Azure 验证 Azure SDK 客户端对象的身份,应用程序应使用 @azure/identity 包中的 DefaultAzureCredential
类。
首先,将 @azure/identity 包添加到应用程序中。
npm install @azure/identity
接下来,对于在应用中创建 Azure SDK 客户端对象的任何 JavaScript 代码,你需要:
- 从
@azure/identity
模块中导入DefaultAzureCredential
类。 - 创建
DefaultAzureCredential
对象。 - 将
DefaultAzureCredential
对象传递给 Azure SDK 客户端对象构造函数。
以下代码片段中显示了此操作的示例。
// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new DefaultAzureCredential()
);
当上述代码实例化 DefaultAzureCredential
对象时,DefaultAzureCredential
读取环境变量 AZURE_SUBSCRIPTION_ID
、AZURE_TENANT_ID
、AZURE_CLIENT_ID
以及 AZURE_CLIENT_SECRET
,以获取连接到 Azure 的应用程序服务主体信息。