我正在尝试设置一个与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验证器网站中验证令牌,但他们说这是无效的签名。
我错过了什么吗?可能是什么问题?
答案 0 :(得分:3)
您似乎在客户端上获得了Firebase实例ID令牌(也称为FCM令牌),然后尝试验证它是否是有效的Firebase身份验证ID令牌。
这两个令牌有很大不同,并且用途不同,并且Authentication Admin SDK不能正确验证FCM令牌。
要获取Firebase身份验证ID令牌,您应该致电FirebaseUser.getIdToken()
。有关此示例,请参见documentation on getting an ID token。