【问题标题】:Is it possible to capture an OAuth form post redirect in browser?是否可以在浏览器中捕获 OAuth 表单后重定向?
【发布时间】:2021-10-09 05:52:58
【问题描述】:

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

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

我有两个问题:

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

【问题讨论】:

    标签: node.js reactjs oauth-2.0


    【解决方案1】:

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

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

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

    第一季度

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

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

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

    第二季度

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

    WEB 主机响应处理

    在 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 解决方案是如何工作的。

    【讨论】:

    • 使用了客户端密码,不支持 response_mode=query。似乎必须通过 POST 方法在后端 node.js 服务器上捕获重定向。说了这么多,如何优雅地告诉浏览器登录成功并继续?
    • 我会这样做的方式是将代码+状态参数从前端发送到后端,如this code of mine。使用 REST 请求可以控制 SPA。
    • 另外,一旦登录处理完成,后端可能会发出重定向 - 使用查询参数将 SPA 带到它可以处理的登录后登录位置。
    • 谢谢,加里。我最终使用了重定向解决方案,并且效果很好。我接受你的回答。请将额外的 cmets 添加到原始答案中
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2015-09-20
    • 2014-12-16
    • 2021-04-15
    • 2022-11-03
    • 2011-11-30
    • 2011-09-25
    相关资源
    最近更新 更多