是否可以在浏览器中捕获 OAuth 表单 post 重定向?

Is it possible to capture an OAuth form post redirect in browser?

我正在尝试在我的 react/node.js 应用程序中集成第三方 (TP) API (https://api.icicidirect.com/apiuser/ICICIDirectAPIDOC.htm)。 API 使用 OAuth 2 进行身份验证和身份验证后。

操作顺序是这样的——用户在我的 React 应用程序上单击 TP 图像,然后被重定向到 TP 的登录页面。身份验证后,TP 以 post 形式进行重定向。根据我目前的理解,只有后端服务器可以承载一个 post 方法,其中 TP 可以 post 表单。从这里开始,不清楚如何触发 React 应用程序来检测用户已登录并呈现他们的仪表板。

我有两个问题:

  1. 假设我将前端 URL 注册为重定向 URL,有没有办法可以在前端捕获此表单 post?
  2. 如果 #1 不可能,在后端收到重定向后,让前端知道登录成功的最优雅方式是什么?

我会检查一些事情,因为您的应用似乎需要使用 OAuth 令牌以及登录:

  • 是否使用了 PKCE 和/或客户端密码?这将决定您是否可以在浏览器中完成登录并交换令牌的代码。

  • 您可以在触发重定向时添加一个 response_mode=query 查询参数,这将使响应成为 GET(如果提供程序支持)。

Q1

通常的解决方案是return这种类型URL的授权结果,这是SPA友好的。浏览器无法接收 POST 请求。

SPA 然后可以执行这些操作之一并获取令牌:

  • 如果使用 PKCE(运行时机密),则将代码交换为令牌
  • 否则通过附加客户端密钥
  • 的API代理请求

Q2

如果提供商仅支持 POST 响应,您可以在 Web 主机服务于 index.html 页面时在 Web 主机中编写少量代码(作为解决方法)。这可以检查它是否是登录响应,如果是,则使用上述查询参数触发重定向。

网络主机响应处理

在虚拟主机中进行登录响应处理和代码交换,然后将 SPA 重定向到一个位置,例如 https://www.example.com/loggedin,这将通知 SPA 以便它可以更新其 UI 状态.

备选方案:出于兴趣

以上内容可能需要 Web 主机中的大量代码,这可能会影响您的 Web 部署选项,例如,如果您想从内容分发网络提供 Web 静态内容。

因此,虚拟主机可以使用的另一个选项是执行重定向到 https://www.example.com?code=xxx&state=yyy。然后 SPA 可以调用 API 来完成 OAuth 处理。这需要更多的安全尽职调查(例如确保使用 PKCE),但 Back End for Front End SPA 解决方案将如何工作。