【发布时间】:2019-04-28 17:51:33
【问题描述】:
问题:当我使用 oauth2(从我的服务器启动)对用户进行身份验证时,如何从 oauth2 回调中获取初始用户 ID,以便将其映射回初始身份验证请求在我的服务器上?
上下文:
我正在开发一个网络应用程序,我需要在其中要求用户授予对其 Google 日历的访问权限。
考虑 oauth 流程:
web 客户端(发送请求到)-> backend(发送 oauth 请求到)-> google(授予访问权限)-> backend(这一步怎么知道用户存储refresh_token?)
这里是更多细节默认流程:
- 用户登录到我的网络应用(客户端)
- 网络应用要求用户启动 oauth2 流(客户端)
- 将“启动身份验证流程”请求发送到我的后端(后端)
- 在后端,我向 google 发送 oauth 请求,如下所示:
const authUrl = new google.auth.OAuth2(clientId, secret, redirectUrl)).generateAuthUrl(options) res.redirect(authUrl)
- 这会将用户重定向到谷歌同意页面。 (谷歌)
- 一旦用户授予权限,他们将被重定向回 OAuth2 客户端中指定的 url(后端,我的“回调”端点)
- 此时我需要将 refresh_token 保存到用户的数据库位置。 (后端)
那么我如何从“回调”中理解这仍然是启动流程的同一用户?
【问题讨论】:
-
为什么需要跟踪用户在流程中的位置? AFAIK真的没有办法做到这一点。获得访问令牌后,您还应该收到有关刚刚授予访问权限的人的一些基本个人资料信息。
-
@MikeWilcox - 我只需要为该特定用户存储“refresh_token”。你将如何做到这一点?关于基本信息 - 如果我没记错的话,您说的是 google 帐户信息(如电子邮件、google id?),这与用户在注册我的应用程序时提供的信息不一定相同(他们可以使用不同的电子邮件地址注册为与他们用来授予权限的谷歌帐户相反的帐户,因此我不能使用它来匹配两者)。
标签: node.js express google-oauth