如何解决 Nodejs google-auth-library 无效令牌签名错误?

Posted

技术标签:

【中文标题】如何解决 Nodejs google-auth-library 无效令牌签名错误?【英文标题】:How to resolve Nodejs google-auth-library invalid token signature error? 【发布时间】:2021-03-29 19:38:36 【问题描述】:

我正在为我的移动应用程序使用颤振。我尝试添加使用谷歌登录。 Flutter 方面一切正常。我正在从移动应用程序获取 idToken 并发送到我的后端 nodejs。

现在,我想使用这个 idToken 在 nodejs 后端通过 google-auth-library 包验证用户的请求。

let token = "token"
const CLIENT_ID = "client_id"
const  OAuth2Client  = require('google-auth-library');
const client = new OAuth2Client(CLIENT_ID);
async function verify() 
    try 
const ticket = await client.verifyIdToken(
            idToken: token,
            audience: CLIENT_ID,  // Specify the CLIENT_ID of the app that accesses the backend
            // Or, if multiple clients access the backend:
            //[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
        );
        const payload = ticket.getPayload();
        const userid = payload['sub'];
        console.log(payload)
     catch (error) 
        console.log(error)
    

verify()

但此代码总是返回此错误 => 错误:无效的令牌签名: 在 OAuth2Client.verifySignedJwtWithCertsAsync (\node_modules\google-auth-library\build\src\auth\oauth2client.js:566:19)

我应该怎么做才能在nodejs后端验证这个idToken?

谢谢。

【问题讨论】:

你好@user2674354 你有得到什么吗?如果是,那么请您添加它。因为我也被困在这里了。 【参考方案1】:

如果您传递给函数的 idToken 来自您的 Flutter 应用程序的日志,那么由于 print() 的限制,您可能无法在日志中打印整个 idToken。

我使用下面的代码 sn-p 打印出 idToken 并在 API 中使用它,这给了我一个成功的响应。

print('ID TOKEN');
String token = googleAuth.idToken;
while (token.length > 0) 
    int initLength = (token.length >= 500 ? 500 : token.length);
    print(token.substring(0, initLength));
    int endLength = token.length;
    token = token.substring(initLength, endLength);

【讨论】:

以上是关于如何解决 Nodejs google-auth-library 无效令牌签名错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NodeJS 解决 Supertest 和 jest 中的 ECONNREFUSED 错误?

如何解决 NodeJS 中的“TypeError:将循环结构转换为 JSON”

刷新页面显示找不到文件错误如何使用 [angular js + NodeJS/ExpressJS] 解决

如何解决Nodejs:错误:ENOENT:没有这样的文件或目录

如何解决 Nodejs google-auth-library 无效令牌签名错误?

如何解决 NodeJS、MySQL 中无法 GET /logout 的问题