Firebase ID 令牌的“aud”(受众)声明不正确。期待 XXX 但得到 XXX

问题描述 投票:0回答:1

我正在使用 React Native 和 NodeJS 创建应用程序。我已经有了我的身份验证系统。现在我尝试实现 Google Sign In。所以:

  1. 在 Firebase 中创建了一个 Google 应用程序。
  2. 生成.keystore文件并获取SHA1密钥。
  3. 更新了build.gradle以在客户端安装SDK。
  4. 将文件放入客户端,将 Google 服务文件放入我的 Node.js 应用程序中。
  5. 在 React Native 和 Node.js 中实现了代码。
  6. 从客户端检索了令牌。
  7. 使用 Postman 测试时遇到错误。

我在 Postman 上测试时遇到此错误

消息:“Firebase ID 令牌的“aud”(受众)声明不正确。 期待“tak-muscu”,但得到了 “XXXX-ruib6t1s7lochabens3f3ep67pa411nc.apps.googleusercontent.com”。 确保 ID 令牌来自与该 ID 令牌相同的 Firebase 项目 用于验证此 SDK 的服务帐户。看 https://firebase.google.com/docs/auth/admin/verify-id-tokens 用于 有关如何检索 ID 令牌的详细信息。”

我从我的客户那里获得了令牌

  GoogleSignin.configure({
    webClientId: 'XXXXX-ruib6t1s7lochabens3f3ep67pa411nc.apps.googleusercontent.com',
    androidClientId: 'XXXXX-fvv7nndd0q53hvoht9cldt82jm5a9306.apps.googleusercontent.com',
    scopes: ['profile', 'email']
  });


  const signIn = async () => {
    try {
      await GoogleSignin.hasPlayServices();
      const userInfo = await GoogleSignin.signIn();
      const idToken = userInfo.idToken;
      console.log('ID Token:', idToken);
    } catch (error) {
      console.error('Google Sign-In error', error.message);
    }
  };

我用Postman把它传给路线

router.post('/google-signin', async (req, res) => {
    const { idToken } = req.body;
    const result = await verifyGoogleToken(idToken);
    if (result.status === 'success') {
      res.send({ message: 'Authentication successful', user: result.decodedToken });
    } else {
      res.status(401).send({ message: 'Authentication failed', error: result.message });
    }
  });

函数 verifyGoogleToken :

const admin = require('firebase-admin');

const verifyGoogleToken = async (idToken) => {
  try {
    const decodedToken = await firebase.auth().verifyIdToken(idToken);
    console.log("Token validé avec succès", decodedToken);
    return { status: 'success', uid: decodedToken.uid };
  } catch (error) {
    console.error('Erreur lors de la vérification du token', error);
    return { status: 'error', message: error.message };
  }
};
module.exports = { verifyGoogleToken };

App.js 服务器 :

const admin = require('firebase-admin');
const serviceAccount = require('./secrets/service-account-file.json'); 

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
  });

我尝试了 4 次...每次都遇到相同的错误

node.js firebase react-native firebase-authentication firebase-admin
1个回答
0
投票

问题是我没有使用正确的令牌。我使用的是 google 登录令牌而不是 firebase 令牌。因此,当我在服务器中传递令牌时,我收到此错误。

所以,这是我找到的解决方案:

import auth from '@react-native-firebase/auth'; //import this
import { GoogleSignin } from '@react-native-google-signin/google-signin';
        
const { idToken } = await GoogleSignin.signIn(); // here you get Google Sign in token
    
const googleCredential = auth.GoogleAuthProvider.credential(idToken);
const userCredential = await auth().signInWithCredential(googleCredential); // use google sign in token for auth to Firebase
const firebaseIdToken = await userCredential.user.getIdToken(true);
console.log('Firebase ID Token:', firebaseIdToken); // Use this token for server.

然后您可以将 firebaseIdToken 传递到您的服务器

© www.soinside.com 2019 - 2024. All rights reserved.