繁体   English   中英

在 firebase-admin 的 verifyIdToken 中更改预期的“受众”

[英]Changing expected `audience` in firebase-admin's verifyIdToken

我们正在尝试在我们的移动应用程序中实现一个Google 登录按钮,并将idToken发送到我们的NodeJS服务器以完成身份验证过程。 移动应用程序上idToken的生成按预期工作,但在服务器端使用firebase-admin验证令牌会引发受众不匹配错误。

方法#1

在我们的 NodeJS 服务器中使用google-auth-library按预期工作(最小示例):

import { OAuth2Client } from 'google-auth-library';

const client = new OAuth2Client(credentials.client_id);

(async () => {
    const ticket = await client.verifyIdToken({
            idToken: token,
            audience: [
                credentials.client_id,
                'xyz.apps.googleusercontent.com',   <===== clientId added here
            ],
        });

    const payload = ticket.getPayload();
    console.log(payload); //  GOOD! idToken verification successful!
})();

它之所以有效,是因为我们手动添加了在移动应用程序的google-services.json中指定的移动client id

方法#2

由于我们宁愿使用 firebase -admin package,我们想知道是否可以对 SDK 的verifyIdToken方法添加类似的audience 目前这不起作用

import admin from 'firebase-admin';

const serviceAccount = fs.readJsonSync('./service-account.json');

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

(async () => {
    const userInfo = await admin.auth().verifyIdToken(token);
    console.log(userInfo);  // ERROR! Verification throws error!
})();

它抛出以下错误:

错误:Firebase ID 令牌的“aud”(观众)声明不正确。 预期为“xyz-123”,但得到的是“xyz.apps.googleusercontent.com”。 确保 ID 令牌来自与用于验证此 SDK 的服务帐户相同的 Firebase 项目

我们做了几次尝试:

  1. 在移动设备上更改Sign-In with Google组件中的 m clientId
  2. 更改nodeJs服务帐户中的值。

这些尝试的结果是未生成令牌,或者我们遇到了所描述的不匹配验证错误。

关于按照方法 #1中所述手动添加受众值, 源代码似乎没有提供提供更多受众的方法。

  1. 是否有理由在firebase-admin中省略添加受众的选项并在google-auth-library中提供?
  2. 在使用 firebase firebase-admin package 验证id tokens时,是否有其他方法可以更改预期audiences

我刚刚遇到了类似的问题并通过使用解决了

// gets firebase id token
const idToken = await result.user.getIdToken();

代替

// gets original id token
const idToken = await GoogleAuthProvider.credentialFromResult(result).idToken;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM