我正在尝试通过使用Admin SDK中的verifyIdToken(idToken)
方法来验证通过使用REST API登录进行身份验证而收到的ID令牌,但是我没有得到解码的令牌,而是得到了错误:
Firebase ID令牌具有不正确的“发行人”声明。应为“ https://securetoken.google.com/”,但获得“ https://identitytoolkit.google.com/”。请确保ID令牌与用于验证此SDK的服务帐户来自同一Firebase项目。有关如何操作的详细信息,请参见https://firebase.google.com/docs/auth/admin/verify-id-tokens。检索ID令牌。
正如我上面所说,我是从REST API获取令牌的,所以我希望它能起作用。 我从API得到的响应是这样的:
{
"kind": "identitytoolkit#VerifyPasswordResponse",
"localId": "pu0yjIc8tnR85X2gERdtLx684DK2",
"email": "test@test.com",
"displayName": "",
"idToken": "<token-id>",
"registered": true
}
这被视为自定义令牌吗?如果可以,该如何验证?
答案 0 :(得分:2)
截至2018年9月,REST API返回的ID令牌的发行者似乎已从https://identitytoolkit.google.com/
更改为https://securetoken.google.com/
。而且我可以在firebase admin SDK中成功验证此id令牌。
[编辑]:firebase管理员SDK仍然失败,无法验证identitytoolkit的verifyAssertion REST API返回的 Facebook ID令牌。
答案 1 :(得分:0)
一种验证ID令牌以进行调试和小批量使用的简便方法 是使用tokeninfo端点。调用此端点涉及 额外的网络请求可以为您完成大部分验证, 但会带来一些延迟以及潜在的网络错误。
要使用tokeninfo端点验证ID令牌,请进行HTTPS 向端点发送POST或GET请求,然后在 id_token参数。例如,要验证令牌“ XYZ123”,请输入 以下GET请求:
https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
{
// These six fields are included in all Google ID Tokens.
"iss": "https://accounts.google.com",
"sub": "110169484474386276334",
"azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
"aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
"iat": "1433978353",
"exp": "1433981953",
// These seven fields are only included when the user has granted the "profile" and
// "email" OAuth scopes to the application.
"email": "testuser@gmail.com",
"email_verified": "true",
"name" : "Test User",
"picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
"given_name": "Test",
"family_name": "User",
"locale": "en"
}