提问者:小点点

Firebase验证ID令牌给出:FirebaseID令牌有不正确的“iss”


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

我正在使用python跟踪这里的文档。基本上我在客户端使用email密码登录,返回idToken,然后我将此idToken发送到服务器进行验证,但得到如下错误。

ValueError: FirebaseID令牌具有不正确的iss(颁发者)声明。预期的https://securetoken.google.com/myproject但得到了https://identitytoolkit.google.com/。确保ID令牌来自与用于验证此SDK的服务号相同的Firebase项目。有关如何检索ID令牌的详细信息,请参阅https://firebase.google.com/docs/auth/admin/verify-id-tokens。

我很确定我和客户端在同一个项目中生成了服务号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个答案

匿名用户

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

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

文档

匿名用户

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

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