Firebase verifyIdToken错误:解码Firebase ID令牌失败。

时间:2018-08-21 14:22:20

标签: android firebase firebase-authentication jwt firebase-cloud-messaging

我正在尝试设置一个与NodeJS REST API进行通信的Android应用程序,该API与Firebase进行通信,但是firebase令牌似乎对我不起作用。

我现在正在本地运行一个本地nodejs服务器和一个Android仿真来对其进行测试,这是它的外观:

Android方法:

@Override
public void onNewToken(String token) {
    Log.i(TAG, "Refreshed token: " + token);
    postRegistrationToken(token);
}

这将正确生成并发送到REST API。

日志显示:

Refreshed token: "MY_TOKEN_STRING"

在NodeJS中:

app.post('/api/token/get', (req, res) => {
const token = req.body.registrationToken;
LOG.info(`Acquired token: ${token}`);
admin.auth().verifyIdToken(token)
    .then((decodedToken) => {
        LOG.info(`Successfully validated registrationToken ${token}`);
        //stuff
    })
    .catch((err) => {
        LOG.error(err)
    });
});

verifyIdToken失败,但是令牌与Android客户端中生成的令牌相同:

Acquired token: "MY_TOKEN_STRING"
Error: Decoding Firebase ID token failed.
 Make sure you passed the entire string JWT which represents an ID token.
 See https://firebase.google.com/docs/auth/admin/verify-id-tokens for details on how to retrieve an ID token.

我试图在https://www.jsonwebtoken.io/之类的JWT验证器网站中验证令牌,但他们说这是无效的签名。

我错过了什么吗?可能是什么问题?

1 个答案:

答案 0 :(得分:3)

您似乎在客户端上获得了Firebase实例ID令牌(也称为FCM令牌),然后尝试验证它是否是有效的Firebase身份验证ID令牌。

  • FCM令牌/实例ID令牌标识特定设备上特定应用的安装。它不能识别特定用户。
  • Auth ID令牌标识特定应用程序/项目的特定用户。它不能识别特定设备。

这两个令牌有很大不同,并且用途不同,并且Authentication Admin SDK不能正确验证FCM令牌。

要获取Firebase身份验证ID令牌,您应该致电FirebaseUser.getIdToken()。有关此示例,请参见documentation on getting an ID token