You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产环境Azure OpenAI认证:clientId等凭证获取及管理咨询

如何获取并安全管理Azure OpenAI生产环境的ClientSecretCredential凭证?

问题描述

我正在开发一款使用Azure OpenAI的应用,本地通过运行az login后使用DefaultAzureCredential可成功认证,但该方法无法用于生产环境。我了解生产环境更适合使用@azure/identity中的ClientSecretCredential,但不清楚如何获取所需的clientId、tenantId和clientSecret。

本地使用DefaultAzureCredential的代码如下:

import { AzureOpenAI } from 'openai';
import { DefaultAzureCredential } from '@azure/identity';

const credential = new DefaultAzureCredential();
const deployment = 'gpt-4o';
const apiVersion = '2024-02-15-preview';

const openai = new AzureOpenAI({
  azureADTokenProvider: getBearerTokenProvider(
    credential,
    'https://cognitiveservices.azure.com/.default'
  ),
  deployment,
  apiVersion,
});

具体问题

  1. 在哪里获取ClientSecretCredential所需的clientId、tenantId和clientSecret?
  2. 生产环境中安全存储和管理这些凭证有哪些最佳实践?

环境

  • Node.js v14.17.0
  • TypeScript v4.4.2
  • Azure OpenAI SDK(最新版本)
  • @azure/identity(最新版本)

已尝试

  • 查阅Azure文档,但未找到针对Azure OpenAI的凭证获取明确说明
  • 了解服务主体概念,但不确定如何针对此场景正确配置

回答

1. 获取clientId、tenantId和clientSecret的步骤

你需要在Azure门户中创建一个服务主体(Azure AD应用注册),并为其分配Azure OpenAI的访问权限,具体步骤如下:

  • 登录Azure门户,搜索并进入「Azure Active Directory」服务
  • 创建应用注册:左侧菜单选择「应用注册」,点击「新注册」,填写应用名称,选择账户类型(推荐选「仅限此组织目录中的账户」),完成注册后进入应用详情页
  • 获取tenantId:在应用详情页的「概述」标签中,找到「目录(租户) ID」,这就是所需的tenantId
  • 获取clientId:同样在「概述」标签中,「应用程序(客户端) ID」即为clientId
  • 生成clientSecret:左侧菜单选择「证书和密码」,点击「新客户端密码」,设置描述和过期时间后点击「添加」,生成的密码值就是clientSecret(注意:该值只会显示一次,务必立即保存)
  • 分配权限:找到你的Azure OpenAI资源,进入「访问控制(IAM)」,点击「添加角色分配」,选择「认知服务用户」(或满足需求的最小权限角色),然后选择刚才创建的服务主体完成分配

2. 生产环境凭证安全管理最佳实践

  • 禁止硬编码凭证:绝对不要将clientId、clientSecret等硬编码到代码、配置文件中,也不要提交到Git等版本控制系统
  • 使用Azure Key Vault存储:将凭证存储到Azure Key Vault中,应用通过托管身份访问Key Vault获取凭证(此时可直接使用DefaultAzureCredential,无需显式管理凭证,是生产环境最安全的方式)
  • 环境变量临时存储:如果使用虚拟机、容器部署,可将凭证设置为环境变量,通过process.env读取,但需确保环境变量的访问权限被严格控制
  • 遵循最小权限原则:只为服务主体分配访问Azure OpenAI所需的最低权限,避免赋予不必要的角色
  • 定期轮换凭证:设置clientSecret的合理过期时间,定期生成新的密码并替换旧凭证
  • 监控访问日志:开启Azure AD和Azure OpenAI资源的访问日志,监控服务主体的访问行为,及时发现异常操作

生产环境代码示例(使用ClientSecretCredential)

import { AzureOpenAI } from 'openai';
import { ClientSecretCredential } from '@azure/identity';

// 从安全存储(如Key Vault或环境变量)读取凭证
const tenantId = process.env.AZURE_TENANT_ID;
const clientId = process.env.AZURE_CLIENT_ID;
const clientSecret = process.env.AZURE_CLIENT_SECRET;

const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
const deployment = 'gpt-4o';
const apiVersion = '2024-02-15-preview';

const openai = new AzureOpenAI({
  azureADTokenProvider: getBearerTokenProvider(
    credential,
    'https://cognitiveservices.azure.com/.default'
  ),
  deployment,
  apiVersion,
});

内容的提问来源于stack exchange,提问作者Gonzalo A .A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:59:54