通过HTTP v1认证进行Firebase云消息传递设备组管理

5
我正在将我的FCM实现从Legacy API迁移到新的HTTP v1 api。
我已经使用firebase-adminsdk创建了我的服务帐户。
我还成功使用HTTP v1向设备组令牌发送推送通知,使用从服务帐户JSON生成的新JWT身份验证令牌。
我的问题是,在使用传统API管理设备组时,我遇到了401未授权错误。

https://firebase.google.com/docs/cloud-messaging/android/device-group

https://fcm.googleapis.com/fcm/notification
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
project_id:SENDER_ID

{
   "operation": "create",
   "notification_key_name": "appUser-Chris",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
                        "cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
                        ... ]

从文档中可以看出,他们正在使用新的JWT令牌来授权设备组的管理,而不是旧的服务器密钥(服务器密钥也将在明年停用)。我的问题是我到底漏了什么?我应该如何使用新的服务帐户来管理设备组?
谢谢
尝试使用firebase-admin-sdk json生成JWT令牌以在设备组API中使用。返回401错误。

Delmontee添加:

为了回答这个问题的赏金,关于FCM设备组的详细信息可以在这里找到:https://firebase.google.com/docs/cloud-messaging/android/device-group#creating_a_device_group

这是一个示例请求和随后的响应,显示了问题。

请求:

 POST /fcm/notification HTTP/1.1
 Host: fcm.googleapis.com
 Content-length: 194
 Project_id: XXXXREMOVEDXXXX
 Content-type: application/json
 Authorization: Bearer ya29.removed:removed
 {
     "operation": "create",
     "notification_key_name": "test-group",
     "registration_ids": ["devicetokenidhere1","devicetokenidhere2"]
 }

回复:
 HTTP/1.1 401 Unauthorized
 Content-length: 147
 X-xss-protection: 1; mode=block
 Content-security-policy: frame-ancestors 'self'
 X-content-type-options: nosniff
 Transfer-encoding: chunked
 Expires: Wed, 28 Jun 2023 14:24:59 GMT
 Server: GSE
 -content-encoding: gzip
 Cache-control: private, max-age=0
 Date: Wed, 28 Jun 2023 14:24:59 GMT
 X-frame-options: SAMEORIGIN
 Alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
 Content-type: text/html; charset=UTF-8
 <HTML>
 <HEAD>
 <TITLE>Unauthorized</TITLE>
 </HEAD>
 <BODY BGCOLOR="#FFFFFF" TEXT="#000000">
 <H1>Unauthorized</H1>
 <H2>Error 401</H2>
 </BODY>
 </HTML>

我的初步想法是,也许我们需要在Google Cloud凭据中进行一些更改,但是当使用“https://fcm.googleapis.com/v1/projects/myproject-id-here/messages:send”向任何一个特定的令牌ID发送消息时,并没有出现任何问题。只有在尝试使用设备组时才会出现401错误。其次,我认为现在正在删除Legacy版本,也许他们需要将“https://fcm.googleapis.com/fcm/notification” URL更新为v1呢?

非常感谢您的帮助。任何帮助都将不胜感激。 - Byron Wang
我已经添加了一份悬赏和一个测试案例,以及相关文档引用,希望能帮助解决这个问题。 - Delmontee
1
我已经向Firebase支持团队提交了一张工单,经过一些来回沟通后,他们正在调查中。我会在这里更新结果。 - Brett
1
我已经向Firebase支持部门提交了一张工单,经过一些来回沟通,他们正在调查中。我会在这里更新结果。 - undefined
好的,Firebase支持团队已经复现了这个问题,并承认设备组管理API缺少对OAuth令牌的支持,这与他们的文档相矛盾。他们已经在内部提交了这个错误,并表示要密切关注发布说明和文档,他们要么会实现支持,要么修复文档。与此同时,我们将继续使用静态服务器密钥进行身份验证。 - Brett
显示剩余13条评论
2个回答

0

0

经过多次测试试图使其工作,我们使用传统的实现方法解决了这个问题。身份验证令牌在该终点上不起作用,所以尝试使用你的服务器密钥,就像旧的传统实现方式一样。

授权:key=服务器密钥

Google可能还没有完全实现设备组的v1版本,这就是为什么我们收到未经授权的响应的原因。


是的,但问题是如果我理解正确的话,服务器密钥也将在明年被废弃。事实上,这就是我的当前设置,我想将jwt令牌迁移到新的设置中以完成所有迁移工作。 - Byron Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接