起初,就在昨天一切正常。但是从今天早上起,我得到了这个案子。
在后端(NodeJS),我使用auth().createCustomToken(SOME_ID)
然后,当我使用从后端获得的令牌在客户端signInWithCustomToken()
上调用时,我收到下一个错误:
{
code: "auth/invalid-custom-token",
message: "The custom token format is incorrect. Please check the documentation."
}
在日志中有https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=MY_API_KEY的POST,其中params {returnSecureToken:true,token:MY_GENERATED_TOKEN}状态为400且响应
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "INVALID_CUSTOM_TOKEN"
}
],
"code": 400,
"message": "INVALID_CUSTOM_TOKEN"
}
}
那么,Google是否介绍了一些重大变化或者是什么?
答案 0 :(得分:0)
**
** Firebase身份验证会话使用寿命很长。每次用户登录时,用户凭据都会发送到Firebase身份验证后端,并交换Firebase ID令牌(JWT)和刷新令牌。 Firebase ID令牌短暂且持续一小时;刷新令牌可用于检索新的ID令牌。仅当出现以下情况之一时,刷新令牌才会过期:
检测到用户的主要帐户更改。这包括密码或电子邮件地址更新等事件。 Firebase Admin SDK提供了撤消指定用户的刷新令牌的功能。此外,还提供了用于检查ID令牌撤销的API。借助这些功能,您可以更好地控制用户会话。 SDK提供了添加限制以防止会话在可疑情况下使用的功能,以及从潜在令牌盗窃中恢复的机制。 https://firebase.google.com/docs/auth/admin/manage-sessions 在客户端,如Angular。如果使用AngularFire2,则可以使用名为signInWithCustomToken(clientToken)的命令并传递customToken。这将为您提供登录或拒绝的接受。
如果firebase拒绝,则取消拒绝并使用路由将用户重定向到登录页面或仅提供登录方式。你的来电。
请记住让Firebase处理JWT的解码。如果您不显示解码,则提供更好的安全性。
答案 1 :(得分:-1)
我遇到了同样的问题。原因是令牌已过期。 Firebase SDK会针对格式错误的令牌和过期的令牌发出相同的错误:auth / invalid-custom-token错误。
希望错误处理很快得到改善,同时开发人员可以通过使用像jtw decode这样的客户端库并检查" exp"来检查令牌是否已过期。时间戳并与当前时间进行比较。
timeSeconds=TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
expSeconds = timeSeconds + 60L * 60L;
并将声明设置为此值
.claim("iat", timeSeconds)
.claim("exp", expSeconds)
验证结果:
"kind": "identitytoolkit#VerifyCustomTokenResponse",
"idToken": "",
"expiresIn": "3600",
"isNewUser": true
stackoverflow.com/questions/45110441/firebase-auth-invalid-custom-token