FCM从Legacy API迁移至V1 API遇IAM_PERMISSION_DENIED权限问题求助
FCM V1 API 迁移时 IAM_PERMISSION_DENIED 问题解决指南
核心问题定位
错误提示明确要求cloudmessaging.messages.create权限,即使配置了Firebase Admin角色仍报错,大概率是以下几个细节没处理到位:
具体解决步骤
1. 给服务账号添加正确的FCM专属角色
直接进入Google Cloud控制台的IAM页面(非Firebase控制台):
- 找到用于获取令牌的目标服务账号
- 点击编辑按钮,添加Firebase Cloud Messaging Admin角色(该角色默认包含
cloudmessaging.messages.create权限) - 若需更精准控制,也可直接单独添加
cloudmessaging.messages.create权限
2. 检查访问令牌的请求作用域(Scope)
Java代码获取令牌时,必须指定FCM专属作用域,否则即使服务账号有权限,令牌也无法获得对应权限:
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("service-account.json")) .createScoped(Collections.singletonList("https://www.googleapis.com/auth/firebase.messaging")); credentials.refreshIfExpired(); String accessToken = credentials.getAccessToken().getTokenValue();
3. 修正Authorization请求头格式
请求头里的Bearer与令牌之间不能加引号,正确格式为:
Authorization: Bearer your_actual_access_token_here
错误的Bearer "accessToken"会导致令牌解析失败,触发权限校验错误。
4. 验证服务账号与项目的匹配性
检查服务账号JSON文件中的project_id字段,必须和请求URL里的mt-middleware-****完全一致,避免误用了其他项目的服务账号。
5. 等待IAM权限生效
Google IAM权限变更后存在5-15分钟的缓存延迟,刚添加角色后不要立刻测试,等待一段时间再重试。
内容的提问来源于stack exchange,提问作者Dinesh S
相关产品推荐
相关产品推荐

