如何将 Google OAuth2 ID 令牌与 node.js / passport.js 一起使用来验证用户是否有效并经过身份验证?

How can I use the Google OAuth2 ID token with node.js / passport.js to verify if the user is valid and authenticated?

在我的前端,我正在使用 vue.js(这并不重要)并且通过 Google OAuth 流程,我从 id_token 得到一个 [=16] =]

let googleAuthIdToken = await this.auth2.currentUser
            .get()
            .getAuthResponse().id_token;

然后我想将该令牌传递到我的 node.js 服务器(Express / Passport)以验证是否允许用户登录。

我想使用 passport 并在响应中向前端发回一个 JWT。

有人可以指导我如何完成这个吗?

使用名为 googleapis 的节点模块更容易,安装后,导入模块。

import { google } from 'googleapis';

然后您需要通过指定 CLIENT_ID, CLIENT_SECRET, REDIRECT_URL.

创建一个 OAuthClient
const oauth2Client = new google.auth.OAuth2(
    CLIENT_ID,
    CLIENT_SECRET,
    REDIRECT_URL,
);

然后您可以使用 oauth2Client.

从 google 获取令牌
const {tokens} = await oauth2Client.getToken(code);
oauth2Client.setCredentials(tokens);

为了获取必要的用户信息存储在自己的数据库中,需要调用此方法。

const plus = google.plus({ version: 'v1', oauth2Client });
const me = await plus.people.get({ userId: 'me' });

me将包含您要查找的用户信息,一旦获得用户信息,您就可以使用 passport js 存储它。