Skip to content

如何在 TypeScript 中快速实现 Azure 服务的身份验证

解决 Azure 云资源访问的权限管理问题:通过使用 @azure/identity SDK,开发者可以一套代码兼容本地开发环境(CLI 登录)与生产环境(托管身份),无需在代码中硬编码密钥。

为什么需要这个技能

在调用 Azure 存储、Key Vault 或 AI 服务等 API 时,必须通过身份验证证明调用者的权限。手动管理 Client Secret 或证书不仅繁琐且存在严重的安全风险(如密钥泄露)。

@azure/identity 库提供了一套统一的凭据模型,最核心的 DefaultAzureCredential 能够自动在多种认证方式之间尝试切换(例如:从环境变量 托管身份 Azure CLI)。这意味着你的代码在本地运行和部署到云端时,无需修改任何认证逻辑。

适用场景

  • 跨环境部署:需要在本地开发机、GitHub Actions 和 Azure Kubernetes Service (AKS) 之间无缝切换。
  • 生产环境脱敏:通过 Managed Identity(托管身份)消除代码和配置文件中的明文密钥。
  • 构建内部工具:需要通过浏览器交互登录或设备代码流(Device Code Flow)获取用户授权。
  • 多云/主权云访问:需要访问 Azure Government 或 Azure China 等特定区域的云环境。

核心工作流

1. 安装与环境准备

首先安装 SDK:

bash
npm install @azure/identity

如果是使用服务主体(Service Principal),请配置环境变量:

bash
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>

2. 使用推荐的默认凭据

这是最推荐的实践,它会根据环境自动选择最佳认证方式:

typescript
import { DefaultAzureCredential } from "@azure/identity";
import { BlobServiceClient } from "@azure/storage-blob";

const credential = new DefaultAzureCredential();

const blobClient = new BlobServiceClient(
  "https://<account>.blob.core.windows.net",
  credential
);

3. 选择特定认证方案

根据需求选择更精准的类:

  • 托管身份 (Managed Identity):适用于部署在 Azure 资源上的代码。
  • 服务主体 (ClientSecretCredential):适用于外部自动化脚本。
  • 交互式登录 (InteractiveBrowserCredential):适用于需要用户手动授权的桌面应用。

4. 自定义凭据链

如果默认顺序不满足需求,可以使用 ChainedTokenCredential 定义自己的尝试顺序:

typescript
import { ChainedTokenCredential, ManagedIdentityCredential, AzureCliCredential } from "@azure/identity";

const credential = new ChainedTokenCredential(
  new ManagedIdentityCredential(),
  new AzureCliCredential()
);

下载和安装

下载 azure-identity-ts 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md

你可能还需要

暂无推荐