首页 > 解决方案 > 在 Google OAuth2 授权流程之后如何将 JWT 从我的后端服务器发送到我的前端

问题描述

我正在创建一个带有 React 前端和 Java Spring Boot 后端的应用程序。

我的登录流程如下所示:

  1. 用户在前端点击登录
  2. 用户被重定向到我服务器上的 Google Oauth 授权端点
  3. OAuth 2.0 授权流程发生:用户被重定向到 Google 并登录。Google 与我的服务器交互,首先交换授权代码,然后交换 JWT 访问令牌。我的服务器现在拥有用户的 JWT 访问令牌。
  4. 问题:我现在需要将 JWT 令牌重定向到我的 React 前端,以便每次用户想要请求访问我服务器上的受保护资源时都可以保存和使用令牌。

现在是否有将令牌从服务器重定向到我的 React 前端的行业标准/最佳实践?

Stack Overflow 上有关于这个主题的类似问题,但是它们至少有 3 年的历史,例如如何在服务器身份验证后为前端提供 JSON Web 令牌? 从那时起,隐式流已被弃用,不再建议将 JWT 存储在本地存储中,并且https://datatracker.ietf.org/doc/html/rfc6750明确不鼓励在重定向 URL 中将不记名令牌传递到前端。

我想知道是否有人知道这个问题的最新解决方案。

标签: authenticationoauth-2.0oauthjwtgoogle-oauth

解决方案


对于基于浏览器的应用程序的 OAuth 2.0 有一个 IETF BCP 草案 - 请参见此处。基本上,它与使用带有 PKCE(代码交换证明密钥)的授权码的原生移动应用程序非常相似。

FWIW 我同意不应该使用隐式流,但是 IMO 你不应该在没有PKCE 的情况下使用授权代码流,因为这个流是用于服务器端呈现的 Web 应用程序。

编辑 - Auth0(市场上最流行的 CIAM 解决方案之一)文档说同样的话 - 见这里

如果客户端是单页应用程序 (SPA),即使用 JavaScript 等脚本语言在浏览器中运行的应用程序,则有两个授权选项:带有代码交换证明密钥 (PKCE) 的授权代码流和带有代码交换证明密钥的隐式流表单发布。在大多数情况下,我们建议使用带有 PKCE 的授权代码流...


推荐阅读