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

如何为企业不同子域名服务配置Google Identity Platform专属Token受众

解决Google Identity Platform多服务Token受众区分问题

针对你在不同子域名服务中使用Google Identity Platform做SSO时,Token受众统一为Firebase项目ID的问题,可以通过以下几种方案实现服务间的Token权限隔离:

方案1:为每个服务创建独立的OAuth客户端ID

这是最符合OAuth 2.0最佳实践的方案,每个服务对应唯一的客户端标识,Token的aud字段会自动匹配该客户端ID:

  • 登录GCP控制台,进入你的Firebase关联项目
  • 导航到「API和服务」→「凭据」页面
  • 点击「创建凭据」→「OAuth客户端ID」,选择「Web应用」类型
  • 填写对应服务的信息:
    • JavaScript起源:填写服务的子域名(如https://staff-portal.company.com)
    • 授权重定向URI:填写服务的认证回调地址(如https://staff-portal.company.com/auth/callback)
  • 重复上述步骤,为retail-portal.company.com创建单独的OAuth客户端ID
  • 在各服务的认证请求中,使用对应的client_id参数发起登录流程
  • 验证Token时,检查aud字段是否等于当前服务的客户端ID,不匹配则拒绝访问

方案2:使用自定义受众(Audience)参数

如果不想创建多个客户端ID,可以在认证请求中指定自定义受众,让Token的aud字段匹配服务标识:

  • 首先在GCP控制台的「Identity Platform」→「设置」→「授权域」中,添加你的服务域名作为允许的受众(如https://staff-portal.company.com)
  • 在发起认证请求时,添加audience参数,值为当前服务的标识(比如OAuth授权URL中追加&audience=https://staff-portal.company.com)
  • 返回的ID Token中,aud字段会变为你指定的自定义受众
  • 后端验证Token时,检查aud是否与当前服务的标识完全匹配

方案3:利用自定义声明标记服务权限

如果需要更灵活的权限控制,可以通过Admin SDK为用户添加服务专属的自定义声明:

  • 在用户完成认证后,通过云函数或后端服务调用Firebase Admin SDK,根据用户访问的服务添加自定义声明,例如:
    admin.auth().setCustomUserClaims(uid, {
      allowed_service: "staff-portal"
    });
    
  • 发起认证请求时,可以通过state参数传递服务标识,后端根据该标识设置对应的声明
  • 验证Token时,解析并检查allowed_service字段是否匹配当前服务的标识,不匹配则拒绝请求

关键注意事项

  • 所有Token验证逻辑必须在后端执行,不能依赖前端判断,避免被篡改
  • 使用自定义受众时,必须确保该受众已被添加到Identity Platform的允许列表,否则认证请求会失败
  • 多客户端ID方案的隔离性最强,推荐用于需要严格权限分离的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:20:26