Google Firebase对接OIDC时issuer不匹配的解决方案问询
背景说明
当前对接的企业客户OIDC发现文档(地址:https://abc-vis-cert-cloud3.ourclient.com/.well-known/openid-configuration)中,issuer字段值为"issuer": "urn:VISCertC3:abc",但Firebase要求该值必须与发现文档的请求域名一致(即"issuer": "https://abc-vis-cert-cloud3.ourclient.com"),导致对接时触发错误:
INVALID_IDP_RESPONSE :
issuerclaim in OIDC discovery document does not match the issuer specified in the request.
客户因已有数百个集成依赖当前配置,无法修改现有issuer字段,以下是可行的解决途径:
1. 搭建反向代理修改发现文档
通过中间代理中转Firebase对客户OIDC发现文档的请求,动态修改返回内容中的issuer字段为Firebase期望的值,不影响客户现有集成。
实现方式示例:
- Node.js Express代理:
const express = require('express'); const axios = require('axios'); const app = express(); // 中转并修改OIDC发现文档 app.get('/.well-known/openid-configuration', async (req, res) => { try { // 请求客户原始发现文档 const originResp = await axios.get('https://abc-vis-cert-cloud3.ourclient.com/.well-known/openid-configuration'); const discoveryDoc = originResp.data; // 替换issuer字段 discoveryDoc.issuer = 'https://abc-vis-cert-cloud3.ourclient.com'; res.json(discoveryDoc); } catch (err) { res.status(err.response?.status || 500).send(err.message); } }); app.listen(3000, () => console.log('代理服务运行在端口3000'));
部署该代理后,将Firebase OIDC配置中的发现文档地址改为代理服务的对应路径(如https://your-proxy-domain.com/.well-known/openid-configuration)。
- Nginx反向代理:
server { listen 443 ssl; server_name your-proxy-domain.com; ssl_certificate /path/to/ssl-cert.pem; ssl_certificate_key /path/to/ssl-key.pem; location = /.well-known/openid-configuration { proxy_pass https://abc-vis-cert-cloud3.ourclient.com/.well-known/openid-configuration; proxy_set_header Host abc-vis-cert-cloud3.ourclient.com; # 替换issuer字段内容 sub_filter '"issuer": "urn:VISCertC3:abc"' '"issuer": "https://abc-vis-cert-cloud3.ourclient.com"'; sub_filter_once on; # 关闭压缩避免替换失败 proxy_set_header Accept-Encoding ""; } }
2. 协商客户提供专属发现文档
请求客户在现有域名下新增一个仅用于Firebase对接的发现文档端点(如https://abc-vis-cert-cloud3.ourclient.com/.well-known/openid-configuration-firebase),该端点返回的文档仅修改issuer字段为Firebase要求的值,其余字段与原发现文档保持一致。
这种方式无需额外搭建代理,仅需客户做少量配置,且完全隔离现有集成与Firebase对接的配置,风险最低。
3. 确认Firebase官方配置限制
目前Firebase Auth并未提供类似Azure B2C的skipIssuerCheck或strictDiscoveryDocumentValidation这类跳过issuer校验的开关,因此无法通过直接修改Firebase配置解决该问题。
内容的提问来源于stack exchange,提问作者Merenzo

