全栈 NestJS 应用程序中的 OAuth2 流程
OAuth2 flow in full-stack NestJS application
另一个 OAuth2 问题,其他地方没有完全涵盖。
我正在使用 NestJS 后端、React 前端、Passport 和我自己的数据库进行身份验证。试图添加一个
OAuth2 身份提供者 (Google).
我将我的 NestJS 应用配置为 OAuth 客户端。登录后我收到回调,此时我有一个 access_token
和从 id_token
的有效负载中提取的请求的用户详细信息。这被封装在 class 扩展 PassportStrategy(Strategy, 'google')
和 AuthGuard('google')
中,其中大部分是自动处理的。代码 here.
不过此时,我需要在后端 (NestJS) 和前端 (React) 之间维护经过身份验证的会话。我想我需要一个 JWT,但我想知道最好的方法:
- 我可以使用 IdP 提供的令牌吗(例如
id_token
或 access_token
)?这样我就不用担心自己发行代币了。 IE。前端接收令牌(从后端或直接从 IdP),在每个请求上发送它,后端在每个请求上用 IdP 验证它(verifyIdToken
或 getTokenInfo
of google-auth-library
) .
这里的一个缺点是每次都有额外的网络请求。我不确定是否需要这样做,因为 IdP 仅用于识别用户,而不用于访问其他资源。另一个缺点是我需要存储刷新令牌并在令牌过期时进行处理(获取新令牌,在前端更新它)。
- 或者,我可以自己发布一个 JWT 而不必担心与 IdP 签入吗? JWT 过期后,我需要提示用户再次登录。在这种情况下,我不需要存储 IdP 令牌。但这是好的做法吗?我能想到的一个问题是,我不会检测用户是否在 IdP 中撤销访问(直到 JWT 过期)。
我最终发布了自己的 JWT 令牌并在我的应用程序中管理用户会话,如本文所述:OAuth2 in NestJS for Social Login (Google, Facebook, Twitter, etc)
另一个 OAuth2 问题,其他地方没有完全涵盖。
我正在使用 NestJS 后端、React 前端、Passport 和我自己的数据库进行身份验证。试图添加一个 OAuth2 身份提供者 (Google).
我将我的 NestJS 应用配置为 OAuth 客户端。登录后我收到回调,此时我有一个 access_token
和从 id_token
的有效负载中提取的请求的用户详细信息。这被封装在 class 扩展 PassportStrategy(Strategy, 'google')
和 AuthGuard('google')
中,其中大部分是自动处理的。代码 here.
不过此时,我需要在后端 (NestJS) 和前端 (React) 之间维护经过身份验证的会话。我想我需要一个 JWT,但我想知道最好的方法:
- 我可以使用 IdP 提供的令牌吗(例如
id_token
或access_token
)?这样我就不用担心自己发行代币了。 IE。前端接收令牌(从后端或直接从 IdP),在每个请求上发送它,后端在每个请求上用 IdP 验证它(verifyIdToken
或getTokenInfo
ofgoogle-auth-library
) .
这里的一个缺点是每次都有额外的网络请求。我不确定是否需要这样做,因为 IdP 仅用于识别用户,而不用于访问其他资源。另一个缺点是我需要存储刷新令牌并在令牌过期时进行处理(获取新令牌,在前端更新它)。
- 或者,我可以自己发布一个 JWT 而不必担心与 IdP 签入吗? JWT 过期后,我需要提示用户再次登录。在这种情况下,我不需要存储 IdP 令牌。但这是好的做法吗?我能想到的一个问题是,我不会检测用户是否在 IdP 中撤销访问(直到 JWT 过期)。
我最终发布了自己的 JWT 令牌并在我的应用程序中管理用户会话,如本文所述:OAuth2 in NestJS for Social Login (Google, Facebook, Twitter, etc)