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

NodeJS服务器无法访问Facebook JWKS端点问题求助

Facebook JWT公钥获取失败问题排查与解决

问题描述

为验证Facebook登录流程中的AuthenticationToken,需要获取其公钥。但后端运行以下代码时,返回类似404页面的HTML,直接用浏览器访问该端点却能正常返回JSON:

response = await fetch('https://www.facebook.com/.well-known/oauth/openid/jwks/', {
  method: 'GET',
  redirect: 'follow',
  follow: 100,
  headers: {
    Accept: 'application/json',
    'Cache-Control': 'no-cache',
    'Content-Type': 'application/json',
  },
}).then(r => r.json());

问题原因

  1. 缺失User-Agent头:Facebook服务器会检测请求的User-Agent标识,后端发起的fetch请求默认不带该头,被判定为非浏览器请求,返回HTML页面而非预期的JSON。
  2. 冗余的Content-Type头:GET请求不需要设置Content-Type: application/json,这个多余的头可能触发服务器的异常请求检测逻辑。

修复后的代码

调整请求头,添加合理的User-Agent并移除不必要的Content-Type:

response = await fetch('https://www.facebook.com/.well-known/oauth/openid/jwks/', {
  method: 'GET',
  redirect: 'follow',
  follow: 100,
  headers: {
    Accept: 'application/json',
    'Cache-Control': 'no-cache',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
  },
}).then(r => r.json());

替代验证方案

如果仍遇到获取公钥的问题,可直接使用Facebook官方提供的token验证方式,无需手动处理公钥:

  • 使用Facebook Graph API的debug_token端点:传入你的应用ID、应用密钥以及待验证的AuthenticationToken,接口会直接返回token的有效性、用户信息等结果。
  • 集成Facebook官方SDK(如Node.js的facebook-nodejs-business-sdk),SDK内部已封装好token验证逻辑,无需手动管理公钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:04:56