【问题标题】:OAuth2 flow in full-stack NestJS application全栈 NestJS 应用程序中的 OAuth2 流程
【发布时间】:2021-07-18 02:36:15
【问题描述】:

又一个 OAuth2 问题在其他地方没有完全涵盖。

我正在使用 NestJS 后端、React 前端、Passport 和我自己的数据库进行身份验证。试图添加一个 OAuth2 身份提供商 (Google)。

我将我的 NestJS 应用程序配置为 OAuth 客户端。登录后我收到回调,此时我有一个access_token 和从id_token 的有效负载中提取的请求的用户详细信息。这被封装在一个扩展PassportStrategy(Strategy, 'google')AuthGuard('google') 的类中,其中大部分是自动处理的。代码here

然而,此时我需要在后端 (NestJS) 和前端 (React) 之间维护一个经过身份验证的会话。我想我需要 JWT,但我想知道最好的方法:

  • 我可以使用 IdP 提供的令牌(例如 id_tokenaccess_token)吗?这样我就不用担心自己发行代币了。 IE。前端接收令牌(来自后端或直接来自 IdP),在每个请求中发送它,后端在每个请求中使用 IdP 验证它(verifyIdTokengetTokenInfogoogle-auth-library)。

这里的一个缺点是每次都有额外的网络请求。我不确定是否需要这样做,因为 IdP 仅用于识别用户,而不用于访问其他资源。另一个缺点是我需要存储一个刷新令牌并在令牌过期时进行处理(获取新令牌,在前端进行更新)。

  • 那么,或者,我可以自己签发 JWT,而不用担心与 IdP 签到吗?一旦 JWT 过期,我需要提示用户再次登录。在这种情况下,我不需要存储 IdP 令牌。但这是好的做法吗?我能想到的一个问题是,我不会检测到用户是否撤销了 IdP 中的访问权限(直到 JWT 过期)。

【问题讨论】:

    标签: express oauth-2.0 google-oauth passport.js nestjs


    【解决方案1】:

    我最终发布了自己的 JWT 令牌并在我的应用中管理用户会话,如本文所述:OAuth2 in NestJS for Social Login (Google, Facebook, Twitter, etc)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-05
      • 2017-12-31
      • 1970-01-01
      • 2017-09-28
      • 2019-05-02
      • 2019-06-11
      • 2018-07-26
      • 2015-03-05
      相关资源
      最近更新 更多