如何在服务器上验证FCM注册令牌?

Emr*_*nce 7 node.js firebase firebase-cloud-messaging

我获得了用于Web推送的Firebase Cloud Messaging注册令牌。然后,我将此邮件发送到服务器以保存在数据库中,以供以后推送。但是,如何验证此令牌有效或伪造?

我已经尝试过了,但是我认为这是针对Auth令牌而不是针对Web推送的。

其他人可以将随机伪造令牌的请求发送到我的服务器。我想防止这种情况,然后再保存到数据库中。

编辑:解决了,我写了一个简单的类来使用FCM快速进行Web推送。 https://github.com/emretekince/fcm-web-push

AL.*_*AL. 9

发送到无效的注册令牌时,您将收到200 +错误:InvalidRegistration

检查传递给服务器的注册令牌的格式。确保它与客户端应用程序通过Firebase Notifications注册收到的注册令牌匹配。不要截断或添加其他字符。

当您尝试发送简单的cURL请求(其中注册令牌只是随机生成)时,这是响应:

curl --header "Authorization: key=$[your_server_key_here]" \
       --header Content-Type:"application/json" \
       https://fcm.googleapis.com/fcm/send \
       -d "{\"registration_ids\":[\"ABC\"]}"
Run Code Online (Sandbox Code Playgroud)

注意,我"ABC"registration_ids参数中添加了。如果它是有效的注册令牌,但未与您的项目关联,则可能会收到200 + error:NotRegistered

您可以尝试通过使用dry_run参数从服务器发送测试消息以查看响应,而无需向设备发送实际消息:

将此参数设置为true时,允许开发人员测试请求而无需实际发送消息。


Ahm*_*egy 7

根据文档,您可以用于validate_only测试请求,而无需实际传递消息。

https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages/send


Die*_*ini 6

一种方法是发送带有dry_run选项 = true的消息,如 AL 所述。在另一个答案中。

另一种方法是使用 InstanceId 服务器 API:https :
//developers.google.com/instance-id/reference/server


Rat*_*ker 6

使用节点管理 SDK

如果有人使用 firebase Admin SDK for node.js,则无需使用server_key显式手动发送请求。Admin SDK提供发送dry_run推送消息来验证fcm_token.

function verifyFCMToken (fcmToken) => {
    return admin.messaging().send({
        token: fcmToken
    }, true)
}
Run Code Online (Sandbox Code Playgroud)

使用此方法如下

verifyFCMToken("YOUR_FCM_TOKEN_HERE")
.then(result => {
    // YOUR TOKEN IS VALID
})
.catch(err => {
    // YOUR TOKEN IS INVALID
})
Run Code Online (Sandbox Code Playgroud)

使用 Java 管理 SDK

您可以使用以下功能

function verifyFCMToken (fcmToken) => {
    return admin.messaging().send({
        token: fcmToken
    }, true)
}
Run Code Online (Sandbox Code Playgroud)