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

带客户端密钥的应用注册在开发环境正常但生产环境异常

排查方向

网络连通性验证

  • 在生产机上执行命令测试Azure AD令牌端点的可达性:
    curl -v https://login.microsoftonline.com/{你的tenantId}/oauth2/v2.0/token
    
    重点看是否能建立TCP连接、完成TLS握手,若出现超时、连接被拒绝,说明网络出站规则拦截了流量。
  • 检查生产机所在云实例的出站安全组/防火墙规则,确认允许443端口访问login.microsoftonline.com及其关联IP段。
  • 若生产机需通过代理访问外网,需配置NodeJS代理环境变量:
    export HTTP_PROXY=http://your-proxy:port
    export HTTPS_PROXY=http://your-proxy:port
    
    或在ClientSecretCredential初始化时显式传入代理配置:
    const credential = new ClientSecretCredential(tenantId, clientId, clientSecret, {
      proxyOptions: {
        host: "your-proxy",
        port: port
      }
    });
    

Azure应用注册配置复查

  • 检查应用注册的IP访问限制:进入Azure门户→应用注册→管理→认证→令牌配置,确认未设置仅允许特定IP范围的客户端请求令牌。
  • 核实应用注册的客户端密钥状态:进入证书和秘密页面,确认密钥未过期、状态为启用,且生产环境使用的密钥值与开发机完全一致(可重新生成新密钥测试)。
  • 确认应用注册的租户访问范围:若为单租户应用,检查生产机所在网络是否属于租户允许的访问范围,未被设置为仅限内部IP访问。

NodeJS环境与依赖检查

  • 对比开发机与生产机的NodeJS版本:建议使用LTS版本(18.x/20.x),旧版本可能存在TLS握手或网络请求兼容性问题。
  • 锁定@azure/identity包版本:确保生产环境安装的SDK版本与开发机完全一致,避免版本差异导致的网络处理逻辑不同。
  • 编写最小化测试脚本:直接用axios或fetch调用Azure AD令牌端点,排除SDK封装的问题:
    const axios = require('axios');
    axios.post('https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token', 
      new URLSearchParams({
        client_id: 'your-client-id',
        client_secret: 'your-client-secret',
        grant_type: 'client_credentials',
        scope: 'https://management.azure.com/.default'
      }))
    .then(res => console.log(res.data))
    .catch(err => console.error(err));
    

环境变量与系统配置排查

  • 输出生产环境的配置变量:在代码中添加console.log打印tenantId、clientId、clientSecret,确认无多余空格、换行符或大小写错误。
  • 检查生产机系统时间:确保系统时间与标准时间偏差不超过5分钟,时间偏差过大可能导致TLS证书验证失败,触发网络错误。

内容的提问来源于stack exchange,提问作者aab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:46:22