全栈 NestJS 应用程序中的 OAuth2 流程

2023-12-09

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

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

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

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

  • 我可以使用 IdP 提供的令牌(例如id_token or access_token)?这样我就不用担心自己发行代币了。 IE。前端接收令牌(从后端或直接 IdP),在每个请求上发送它,后端在每个请求上使用 IdP 验证它(verifyIdToken or getTokenInfo of google-auth-library).

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

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

我最终发行了自己的 JWT 令牌并在我的应用程序中管理用户会话,如本文所述:NestJS 中的 OAuth2 用于社交登录(Google、Facebook、Twitter 等)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全栈 NestJS 应用程序中的 OAuth2 流程 的相关文章

随机推荐