使用OAuth2访问令牌认证iid.googleapis.com失败,调用batchImport遇权限问题
解决FCM batchImport接口认证失败问题
问题重现
调用接口将APNs令牌转换为FCM令牌时,持续返回认证失败错误,请求命令如下:
curl -X POST "https://iid.googleapis.com/iid/v1:batchImport" \ -H 'Authorization: Bearer ya29.c.....Sh1' \ -H 'Content-Type: application/json' \ -H 'access_token_auth: true' \ -d ' { "application": "com.example.sample.user", "sandbox":false, "apns_tokens":[ "6d83c......9be83f1396" ] } '
返回错误:
{"error":"Not authenticated or unauthorized"}
已尝试操作
- 请求权限范围包含:firebase.messaging、cloud-platform
- 按OAuth2服务账号指南生成密钥
- 使用google-auth-library生成访问令牌
- 尝试过OAuth2 playground
- 查阅过同类认证问题
解决建议
绑定服务账号IAM角色
确保生成OAuth2令牌的服务账号已在Firebase控制台的IAM页面中分配Cloud Messaging Admin角色,仅声明权限范围不足以完成认证,必须通过IAM明确赋予操作权限。修正令牌生成逻辑
必须使用服务账号的JSON密钥文件生成令牌,而非用户账号的OAuth凭证。生成时要明确指定firebase.messaging权限范围,确保令牌是服务账号专属的访问凭证。移除冗余请求头
删除access_token_auth: true请求头,该字段在使用服务账号令牌时并非必需,可能会干扰认证流程。核对应用包名
确认请求体中application字段的值,与Firebase控制台注册的iOS应用包名完全一致,包括大小写、特殊字符都不能出错。验证令牌有效性
调用Token Info接口检查令牌的权限范围与过期时间:curl https://oauth2.googleapis.com/tokeninfo?access_token=ya29.c.....Sh1若返回结果的
scope不包含firebase.messaging权限,说明令牌生成时的权限范围指定错误。
内容的提问来源于stack exchange,提问作者LIew
相关产品推荐
相关产品推荐

