全栈NestJS应用中的OAuth2流 [英] OAuth2 flow in full-stack NestJS application

查看:38
本文介绍了全栈NestJS应用中的OAuth2流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

另一个其他地方未完全涉及的OAuth2问题。

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

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

但是,在这一点上,我需要在后端(NestJS)和前端(REACT)之间维护一个经过身份验证的会话。我想我需要JWT,但我想知道最好的方法是什么:

  • 是否可以使用IdP提供的令牌(例如id_tokenaccess_token)?这样我就不用担心自己发代币了。即前端(后端或IdP直接接收令牌),每次请求发送,后端每一次请求(verifyIdTokengoogle-auth-librarygetTokenInfo)与IdP验证。
这里的一个缺点是每次都需要额外的网络请求。我不确定是否需要这样做,因为IdP只用于识别用户,而不是用于访问其他资源。另一个缺点是我需要存储刷新令牌,并在令牌过期时进行处理(获取新令牌,在前端更新)。

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

推荐答案

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

这篇关于全栈NestJS应用中的OAuth2流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆