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

Azure应用服务中JwksClient getSigningKey报socket hang up问题

问题分析与修复方案

本地使用jsonwebtoken和jwks-rsa验证Token完全正常,但部署到Azure应用服务后出现ECONNRESET(socket hang up)错误,signkey返回undefined,更换带tenant_id的JWKS地址也无效,以下是针对性的排查和修复方案:

1. 检查Azure出站网络配置

Azure应用服务(尤其是免费/基础层)可能存在出站连接限制,或者VNet集成的NSG规则阻止了对login.microsoftonline.com的HTTPS(443端口)访问:

  • 进入Azure门户,查看应用服务的网络配置,确认出站规则允许访问目标域名。
  • 在jwksClient中增加超时配置,避免因网络延迟导致连接中断:
const client = jwksClient({
    strictSsl: true,
    jwksUri: 'https://login.microsoftonline.com/common/discovery/keys',
    requestHeaders: {},
    requestAgentOptions: {
        timeout: 10000 // 延长超时至10秒
    },
});

2. 适配TLS版本兼容性

Azure的Node.js运行环境默认TLS版本可能不满足Microsoft端点要求,导致连接被重置:

  • 在代码开头强制指定TLS 1.2+版本:
const tls = require('tls');
tls.DEFAULT_MIN_VERSION = 'TLSv1.2';
  • 确保应用服务使用的Node.js版本为16.x及以上的LTS版本,旧版本TLS支持存在缺陷。

3. 启用JWKS密钥缓存

频繁请求Microsoft的JWKS端点可能触发频率限制,导致连接被重置。利用jwks-rsa的内置缓存功能减少远程请求:

const client = jwksClient({
    strictSsl: true,
    jwksUri: 'https://login.microsoftonline.com/common/discovery/keys',
    requestHeaders: {},
    requestAgentOptions: {},
    cache: true,
    cacheMaxEntries: 5,
    cacheMaxAge: 600000 // 缓存10分钟
});

4. 排查SSL验证问题

Azure环境的根证书信任链可能与本地不同,导致严格SSL验证失败,间接引发连接中断:

  • 临时将strictSsl设为false测试(仅用于排查,生产环境禁用):
const client = jwksClient({
    strictSsl: false,
    jwksUri: 'https://login.microsoftonline.com/common/discovery/keys',
    // 其他配置
});
  • 若测试有效,需在Azure应用服务中配置信任对应的CA证书,确保SSL验证正常。

内容的提问来源于stack exchange,提问作者Arun Kumar S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:07:49