使用负载均衡器时,如何解决Firebase Admin SDK验证Token超时问题?
Firebase Admin SDK验证Token在负载均衡环境下的ETIMEDOUT问题
问题现象
单WAS服务器部署时,通过NestJS WebSocket使用Firebase Admin SDK的verifyIdToken()方法验证Token获取uid完全正常;但添加负载均衡器扩容至两台服务器后,持续出现以下错误:
错误信息
FirebaseAuthError: Error while making request: connect ETIMEDOUT
errorInfo: { code: 'auth/argument-error', message: 'Error while making request: connect ETIMEDOUT [IP Address]:443.' }
两台服务器逻辑完全一致,仅IP不同,Token验证函数及Firebase应用初始化代码如下:
相关代码
Token验证函数
// 验证Firebase Token并返回uid async VerifyFirebaseToken(Token: string): Promise<string> { try { const VerifiedToken = await this.firebaseVerifierApp .auth() .verifyIdToken(Token); return VerifiedToken.uid; } catch (error) { console.log( 'Critical error occured!! See details below.', ); console.log(error); return ''; } }
Firebase应用初始化代码
this.firebaseVerifierApp = firebase.initializeApp({ credential: firebase.credential.cert(firebase_params), });
用户疑问
怀疑负载均衡器无法保证Firebase验证的回调返回至请求发起的服务器,询问如何确保回调返回原服务器,或其他解决方法。
解决方法
1. 否定你的猜测:回调返回不是问题根源
verifyIdToken()是同步HTTP请求(SDK内部主动向Firebase Auth服务发起验证请求),不存在回调需要返回原服务器的逻辑——每台服务器都是独立发起请求,和负载均衡的路由规则无关。这个错误本质是服务器无法连接到Firebase Auth的服务端点(443端口)。
2. 核心排查与修复方向
- 检查服务器网络权限:确认两台服务器的防火墙、安全组规则都允许出站访问
https://www.googleapis.com(Firebase Auth的服务域名)。ETIMEDOUT说明TCP连接建立失败,大概率是网络层面的限制。 - 核对配置一致性:确保两台服务器的
firebase_params(证书文件、项目配置)完全一致,没有路径错误或配置缺失。 - 直接测试网络连通性:在服务器上执行curl命令,验证能否正常访问Firebase Auth端点:
如果curl也超时,直接锁定网络问题;如果curl正常,再排查NestJS/WebSocket的网络代理配置。curl -v https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=[你的测试Token] - 升级SDK版本:检查两台服务器的Firebase Admin SDK版本是否一致,旧版本可能存在已知的网络请求bug,执行命令升级到最新稳定版:
npm install firebase-admin@latest
3. 额外优化建议
- 开启SDK调试日志,获取更详细的请求细节:
import * as admin from 'firebase-admin'; admin.initializeApp({...}); admin.logger.setLevel('debug'); - 对Token验证结果做本地缓存(比如用Redis),减少频繁向Firebase Auth发起请求,降低网络依赖。
内容的提问来源于stack exchange,提问作者Marchip
相关产品推荐
相关产品推荐

