Firebase ID令牌具有不正确的;澳元;(观众)要求
我有一个前端,通过Firebase托管。代码使用Firebase身份验证,并通过Firebase ID令牌具有不正确的;澳元;(观众)要求,firebase,google-app-engine,firebase-authentication,firebase-admin,google-app-engine-python,Firebase,Google App Engine,Firebase Authentication,Firebase Admin,Google App Engine Python,我有一个前端,通过Firebase托管。代码使用Firebase身份验证,并通过user.getIdToken()检索令牌。根据对类似问题的回答,这是正确的选择 后端是用Python编写的,需要令牌,并使用firebase_admin SDK对其进行验证。在本地计算机上,我将FIREBASE\u CONFIG设置为从项目导出的FIREBASE auth.json路径。一切正常 现在我通过谷歌AppEngine部署了我的后端。这里我将FIREBASE\u CONFIG配置为app.yaml中的JS
user.getIdToken()
检索令牌。根据对类似问题的回答,这是正确的选择
后端是用Python编写的,需要令牌,并使用firebase_admin SDK对其进行验证。在本地计算机上,我将FIREBASE\u CONFIG
设置为从项目导出的FIREBASE auth.json
路径。一切正常
现在我通过谷歌AppEngine部署了我的后端。这里我将FIREBASE\u CONFIG
配置为app.yaml中的JSON字符串。代码如下所示:
runtime: python37
env_variables:
FIREBASE_CONFIG: '{
"type": "service_account",
"project_id": "[firebase-project-name]",
...
后端在启动时记录FIREBASE\u CONFIG
的值。在日志中,我可以看到JSON字符串在那里,{
是第一个字符。因此,我觉得一切都很好。但是如果我从客户端检索令牌并尝试验证它(相同的代码,在本地工作),则会出现以下错误:
Firebase ID令牌具有不正确的“aud”(观众)声明。应为
“[backend appengine project name]”但获得了“[firebase project name]”。请确保ID标记正确
来自与以前使用的服务帐户相同的Firebase项目
验证此SDK
有人能解释一下,我遗漏了什么以及如何解决它吗?错误消息听起来像是你的客户端应用程序的用户登录到了一个与你的后端使用的Firebase项目不同的项目中。从字面上看,错误消息是,客户端使用的是“后端appengine项目名称”,但你的后端正在使用“firebase项目名称”。确保它们都配置为使用相同的项目ID使用相同的项目。否,客户端使用的是“firebase项目名称”,但后端需要“后端appengine项目名称”"。正如我所写,后端是使用firebase项目中导出的凭据配置的。在本地,它正在工作,但我不知道部署的版本中有什么不同。我不知道我们是否可以为您调试这些内容,除非您能够提供一个MCVE,任何人都可以使用它来重新编程:我认为您的
firebase\u CONFIG
是inco正确。我看到字段“type”:“service\u account”
,这是一个通常在服务帐户凭据中找到的字段,但在FIREBASE\u CONFIG
中从未找到过。而且FIREBASE\u CONFIG
中的项目ID必须拼写为projectId
。虽然此代码可以回答问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。仅代码answe从长远来看,R是没有用的。
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
IdTokenResult idTokenResult = await user.getIdToken(refresh: true);
print("userIdToken:" + idTokenResult.token);