我正在使用 Firebase 身份验证来处理我的 Web 应用程序的用户帐户。当用户输入有效的登录凭据时,我使用 firebase admin SDK 在云功能中生成 JWT,该 JWT 被发送回客户端,然后使用 firebase 进行身份验证。我遇到了由 firebase admin SDK 生成的 JWT 无效的问题。更具体地说,当令牌被解码时(我使用jwt.io),我得到以下信息:
Header: {
"alg": "none",
"typ": "JWT"
}
Payload: {
"aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iat": 1614367953,
"exp": 1614371553,
"iss": "[email protected]",
"sub": "[email protected]",
"uid": "some uid here"
}
该令牌不仅缺少签名,而且 iss 和 sub 值也是错误的。我正在使用
admin.auth().createCustomToken(uid)
生成令牌,并且正在使用具有服务令牌创建权限的有效服务帐户来初始化应用程序。
编辑: 我刚刚发现,只有当所有内容都使用 firebase 模拟器在本地运行时,令牌才会错误生成。当我部署应用程序时,令牌会生成并验证得很好。
确保您检测您的应用程序以与身份验证模拟器对话 ...并在身份验证侦听器执行其操作之前执行此操作。
仅当我尝试验证
createCustomToken
生成的令牌时,我才会收到此错误。
如果您将令牌传递给客户端应用程序中的
signInWithCustomToken
,然后使用auth.currentUser.getIdToken
获取用户令牌,您会注意到令牌略有不同,并且声明是预期的。
然后您可以在后端验证此令牌,并且不会显示任何错误。