【问题标题】:How can I use the Google OAuth2 ID token with node.js / passport.js to verify if the user is valid and authenticated?如何使用带有 node.js/passport.js 的 Google OAuth2 ID 令牌来验证用户是否有效且经过身份验证?
【发布时间】:2020-01-02 00:26:14
【问题描述】:

在我的前端,我使用的是 vue.js(没那么重要),并且通过 Google OAuth 流程,我从以下地址获得了 id_token

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

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

我想使用护照并在响应中将 JWT 发送回前端。

有人可以指导我如何做到这一点吗?

【问题讨论】:

  • 在这种特定情况下,护照对于您的前端 OAuth 流程来说是多余的。我会在登录时注册令牌,将其发送到 express 并将其存储到您最喜欢的数据库上的用户表中。然后我会发出 jwt 并将其保存在数据库中。

标签: node.js express jwt passport.js google-oauth


【解决方案1】:

使用一个叫googleapis的node模块比较容易,安装后导入模块。

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获取token。

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 将包含您正在查找的用户信息,一旦您获得用户信息,您就可以使用护照 js 将其存储。

【讨论】:

  • 为什么我需要一个 REDIRECT_URL?我已经让用户在客户端执行该 oauth 流程。
  • @Shamoon 您可以在 google 开发者控制台中配置 google plus API 时指定可选的 REDIRECT_URL
  • 我在开发者控制台中配置我的 oauth 客户端时指定了 REDIRECT_URL。那么为什么我需要它呢?其次,我已经有了代码。
猜你喜欢
  • 2018-11-21
  • 2017-02-17
  • 2021-10-30
  • 2019-06-28
  • 2016-11-30
  • 1970-01-01
  • 2014-10-25
  • 2019-07-20
  • 2021-05-12
相关资源
最近更新 更多