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

Node.js使用passport-azure-ad验证access token报本地颁发者证书错误

"authentication failed due to: Error: unable to get local issuer certificate"

错误触发根因

该错误本质是Node.js的TLS校验环节无法找到Azure AD签名证书对应的根CA证书,无法完成完整的证书链校验,常见触发场景如下:

  • 运行环境处于有SSL劫持的企业内网/代理环境,代理替换了HTTPS流量的证书,Node默认根证书库不包含代理的自签名CA
  • 使用的Node.js版本过旧,内置根证书库未收录Azure AD当前使用的根CA
  • passport-azure-ad配置错误,关闭了默认的证书校验规则,或配置了错误的元数据地址
适配不同场景的解决方案

场景1:本地开发临时排查(禁止生产环境使用)

可临时关闭全局TLS证书校验快速验证问题,启动服务时添加环境变量即可:
NODE_TLS_REJECT_UNAUTHORIZED=0 node your-server.js

风险提示:该配置会跳过所有HTTPS请求的证书校验,存在严重的中间人攻击风险,仅可用于本地临时排查,绝对不能用于生产环境。

场景2:内网代理/自定义CA环境

将内网代理的根CA证书或自定义CA证书加入Node的信任证书库,启动时通过环境变量指定证书路径:
NODE_EXTRA_CA_CERTS=/path/to/your/custom-root-ca.crt node your-server.js
容器部署场景可将CA证书提前打入镜像,在启动指令中配置对应环境变量即可。

场景3:修复passport-azure-ad配置

检查BearerStrategy的初始化配置,确保元数据地址、校验规则配置正确,参考配置如下:

const { BearerStrategy } = require('passport-azure-ad');

const azureAdOptions = {
  identityMetadata: 'https://login.microsoftonline.com/<你的租户ID>/v2.0/.well-known/openid-configuration',
  clientID: '<你的应用客户端ID>',
  audience: '<你的接口受众标识>',
  validateIssuer: true,
  passReqToCallback: false,
  loggingLevel: 'warn'
};

passport.use(new BearerStrategy(azureAdOptions, (token, done) => {
  // 自定义校验逻辑
  return done(null, token);
}));

如果使用的是Azure AD V1版本的接口,对应修改identityMetadata为V1版本的元数据地址即可。

场景4:Node版本过旧

升级Node.js到16.x及以上的LTS版本,旧版本Node的内置根证书库可能未收录Azure AD近年更换的根CA证书,升级后即可解决默认根证书缺失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:15:01