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

Firebase认证+AWS GraphQL后端场景下ID/Access Token使用最佳实践咨询

最佳实践方案(Firebase Auth + AWS GraphQL 场景)

1. 替换ID Token为Firebase Access Token

  • 从Firebase Auth获取针对后端API的Access Token,而非ID Token。在Flutter中调用FirebaseAuth.instance.currentUser!.getIdTokenResult(true)(forceRefresh: true确保获取最新凭证),提取返回结果中的accessToken字段(注意:Firebase的getIdTokenResult返回的token是ID Token,仅用于前端展示用户信息,accessToken才是API授权的合法凭证)。
  • 必须指定Access Token的受众(aud):在Firebase控制台创建自定义API受众(例如https://your-api-gateway-endpoint或自定义标识符),获取Token时绑定该受众,确保Token仅能用于你的后端API。

2. Lambda授权器的正确逻辑

  • 授权器核心是验证Access Token合法性:
    • 用Firebase公钥验证Token签名(动态获取公钥,避免硬编码)
    • 检查Token过期时间(exp声明)
    • 校验受众(aud)是否匹配你的API标识符
    • 校验发行人(iss)是否为https://securetoken.google.com/你的Firebase项目ID
  • 验证通过后生成IAM策略:允许请求访问GraphQL端点(单一端点可直接指定API Gateway的ARN),同时将Token中的sub(用户唯一ID)、email等必要声明存入上下文(context),传递给业务Lambda。
  • 明确:AWS的IAM策略不能替代Access Token——策略是授权器基于合法Token生成的访问控制规则,Access Token才是证明用户身份的核心凭证。

3. GraphQL业务层的权限控制

由于GraphQL仅暴露单一端点,权限控制需在业务逻辑层实现:

  • 在Ariadne的resolver函数中,从Lambda事件上下文提取用户sub(用户ID)
  • 数据操作时强制添加用户身份过滤:
    • 查询用户自身数据:SELECT * FROM orders WHERE user_id = $1
    • 修改数据前校验所有权:先执行SELECT * FROM posts WHERE id = $1 AND user_id = $2,仅当存在匹配记录时允许修改
  • 可在Ariadne中定义全局权限中间件,对所有resolver做前置校验,减少重复代码。

关键注意事项

  • 禁止用ID Token调用API:ID Token受众是前端应用,不具备API授权的安全性,仅用于前端展示用户信息。
  • 缓存Firebase公钥:授权器无需每次验证都重新下载公钥,缓存后可提升性能。
  • 自动刷新Token:Firebase Access Token默认有效期1小时,前端需在过期前自动刷新,避免用户重复登录。

内容的提问来源于stack exchange,提问作者Pierre Massé

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:10:34