如何解决Nodejs谷歌认证库无效令牌签名错误



我正在为我的移动应用程序使用flutter。我试着用谷歌添加登录。Flutter方面一切都很好。我正在从移动应用程序中获取idToken,并将其发送到我的后端nodejs。

现在,我想使用这个idToken在nodejs后端使用google auth库包来验证用户的请求。

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?

谢谢。

如果您传递给函数的idToken来自您的flutter应用程序的日志,则很可能由于print()的限制,您没有在日志中打印整个idToken。

我使用下面的代码片段打印出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);
}

最新更新