firebase验证ID令牌给出:Firebase ID令牌不正确" iss"

时间:2017-12-14 15:37:46

标签: python firebase firebase-authentication

如何验证服务器上客户端发送的idToken

我正在使用python关注docs here。基本上我使用emailpassword登录客户端,返回idToken,然后将此idToken发送到服务器进行验证,但收到如下错误。

  

ValueError:Firebase ID令牌不正确" iss" (发行人)索赔。   预期" https://securetoken.google.com/myproject"但得到了   " https://identitytoolkit.google.com/&#34 ;.确保ID令牌到来   来自与之相同的服务帐户的Firebase项目   验证此SDK。看到   https://firebase.google.com/docs/auth/admin/verify-id-tokens   有关如何检索ID令牌的详细信息。

我很确定我在与客户端相同的项目中生成了服务帐户json。有人知道会出现什么问题吗?

我的服务器代码如下所示:

from firebase_admin import credentials, initialize_app, auth

def is_authenticated(id_token):
    cred = credentials.Certificate("service-account.json")
    app = initialize_app(cred)
    return auth.verify_id_token(id_token, app)

2 个答案:

答案 0 :(得分:1)

除了发送电子邮件和密码外,您还必须将标志returnSecureToken设置为true,否则您的IdToken将无效,并且也不会获得刷新令牌。

curl 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=[API_KEY]' \
  -H 'Content-Type: application/json' \
  --data-binary '{"email":"[user@example.com]","password":"[PASSWORD]","returnSecureToken":true}'

Documentation

答案 1 :(得分:0)

似乎我在客户端遵循了错误的文档;最后,我关注this docs,并使用以下代码提取我发送到后端进行验证的idToken

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});