authentication - 在 Google OAuth2 授权流程之后如何将 JWT 从我的后端服务器发送到我的前端
问题描述
我正在创建一个带有 React 前端和 Java Spring Boot 后端的应用程序。
我的登录流程如下所示:
- 用户在前端点击登录
- 用户被重定向到我服务器上的 Google Oauth 授权端点
- OAuth 2.0 授权流程发生:用户被重定向到 Google 并登录。Google 与我的服务器交互,首先交换授权代码,然后交换 JWT 访问令牌。我的服务器现在拥有用户的 JWT 访问令牌。
- 问题:我现在需要将 JWT 令牌重定向到我的 React 前端,以便每次用户想要请求访问我服务器上的受保护资源时都可以保存和使用令牌。
现在是否有将令牌从服务器重定向到我的 React 前端的行业标准/最佳实践?
Stack Overflow 上有关于这个主题的类似问题,但是它们至少有 3 年的历史,例如如何在服务器身份验证后为前端提供 JSON Web 令牌? 从那时起,隐式流已被弃用,不再建议将 JWT 存储在本地存储中,并且https://datatracker.ietf.org/doc/html/rfc6750明确不鼓励在重定向 URL 中将不记名令牌传递到前端。
我想知道是否有人知道这个问题的最新解决方案。
解决方案
对于基于浏览器的应用程序的 OAuth 2.0 有一个 IETF BCP 草案 - 请参见此处。基本上,它与使用带有 PKCE(代码交换证明密钥)的授权码的原生移动应用程序非常相似。
FWIW 我同意不应该使用隐式流,但是 IMO 你不应该在没有PKCE 的情况下使用授权代码流,因为这个流是用于服务器端呈现的 Web 应用程序。
编辑 - Auth0(市场上最流行的 CIAM 解决方案之一)文档说同样的话 - 见这里。
如果客户端是单页应用程序 (SPA),即使用 JavaScript 等脚本语言在浏览器中运行的应用程序,则有两个授权选项:带有代码交换证明密钥 (PKCE) 的授权代码流和带有代码交换证明密钥的隐式流表单发布。在大多数情况下,我们建议使用带有 PKCE 的授权代码流...
推荐阅读
- javascript - 在 HTML 中“即时”进行更改的过程背后是什么?
- c# - 为 google 任务设置 ShowCompleted
- mysql - 在一列中多次存储多个值?
- python - 试图理解为什么创建和操纵期货是一种不好的做法
- mysql - Rails db:在生产环境中迁移默认为本地套接字连接
- c++ - 为什么 std::to_string 不支持容器类作为输入?
- c# - 限制 DbContext 访问的架构
- ios - 数组为空时从API中提取数据时如何避免应用程序崩溃
- amazon-web-services - 为什么我在尝试访问 ELB DNS 时会收到 502
- clojure - Clojure 规范 - 测试检查 OutOfMemoryError