gpt4 book ai didi

javascript - 实现 Oauth。第三方认证后应该重定向到哪里?

转载 作者:行者123 更新时间:2023-11-30 11:14:44 26 4
gpt4 key购买 nike

这是我第一次实现 OAuth,所以我只是想了解整个流程。

我正在尝试为 Stripe Connect 实现 OAuth .因此,在第 4 步中,您将向 Stripe 服务器发送带有您的客户端密码的 POST 请求,我认为这意味着您的后端将处理该请求。

想确保我正确地考虑了这个问题。用户通过 Stripe 进行身份验证后,他们将被重定向到您提供的链接(使用授权码作为参数)。您是否打算重定向回前端客户端,然后前端客户端将该授权码发送到您的服务器,然后服务器会将其和客户端密码发送到 Stripe?或者你会重定向到后端的某个路由,然后获取授权码并将用户再次重定向到前端客户端(少一个网络请求)?

编辑:看这个example .所以看起来用户实际上会向您的服务器发出 GET 请求,这会将他们重定向到 Stripe,然后在身份验证后向您服务器上的另一个路由发出另一个 GET 请求。

编辑 2:在进一步挖掘之后,这就是我想我要做的:

  1. 用户点击“连接到 Stipe”,前端客户端向我的服务器发送 GET 请求。
  2. 我的服务器使用 uuid/v4 生成随机字符串并对其进行 base64 编码。
  3. 未编码的字符串保存到我的数据库中,编码后的字符串作为状态参数附加。
  4. 我的服务器将用户重定向到 Stripe 的 Oauth 链接,并将编码状态作为参数。
  5. 用户使用 Stripe 授权并被重定向到我前端的加载页面。
  6. 前端客户端使用来自 Stripe 的授权码和状态向我的服务器发送一个 POST 请求。
  7. 我的服务器解码状态并将其与数据库中的状态进行核对。
  8. 如果状态匹配,我的服务器会向 Stripe 发送一个 POST 请求,其中包含授权码和客户端密码。
  9. Stripe 向我的服务器发送一个用户帐户 ID,然后将其存储在我的数据库的用户模型中。

编辑 3:在实现了几次集成之后,我想再次更新几年前的这个问题。

我会创建一个状态参数作为 uuid,但不对其进行编码。毫无意义。我还将状态参数存储在 redis/dynamodb 中,并添加一个 1min-10min 的 ttl 过期参数。所以 state 参数将是关键,我会将 userId 或 tenantId 作为值包含在内。当用户被重定向回我的服务器时,我将从我的键/值存储中获取状态参数。如果它不存在(或过期),我将返回 400。否则,我将继续 OAuth 流程。

最佳答案

如果我理解正确,重定向链接应该指向您的后端服务器。然后,您后端服务器上的此重定向路由在第 4 步向 Stripe 的端点发出请求。

在许多情况下,访问 token 和刷新 token 存储在数据库中,以供该用户将来的请求使用。这些 token 是非常敏感的信息,可用于进行 Stripe 交易,因此最好不要在前端公开它们。

一开始我也对 OAuth 的东西很困惑。

对提问者编辑#2 的回应:

关于 #2,我不确定在向 Stripe 发送初始请求之前是否需要访问您的服务器。这些“通过 .. 注册”按钮直接链接到服务是很常见的。所以,可能有 <a>类似href="https://connect.stripe.com/express/oauth/authorize?redirect_uri={URL}&client_id={ID}&state={STATE_VALUE}"的按钮. STATE_VALUE可以在用户访问页面时生成。

然后当用户点击该按钮时,用户将被导航到 Stripe 的注册/登录页面。当用户完成填写表单时,Stripe 会将用户带到“redirect_uri”。在这里(#5),我不太确定你所说的“用户被重定向到我前端的加载页面”是什么意思。我在想,它是您应用程序的 URL,所以这个请求必须到达您的服务器。除非请求是由 ajax 发出的,否则用户刚刚来自的页面无法接收和处理响应。对于 Stripe,看起来他们的流程是为简单的 html 请求设计的。 (某些服务可能通过 ajax 执行此操作,在这种情况下,前端代码中有响应处理。)

因此,是您的服务器从 Stripe 接收授权码。服务器检查 STATE_VALUE,使用授权码向 Stripe 发出 POST 请求,从 Stripe 接收 secret /刷新 key 。然后,服务器可以用任何合适的页面响应用户。

我想您可以让您的服务器在发出最后一个 POST 请求之前立即响应,并让前端代码通过 ajax 执行此操作并在发出请求时显示加载页面。但是,我不同意这是一个不错的选择;在我看来,它可能会暴露敏感信息,而且加载时间不够长,不足以成为糟糕的用户体验。

所以从浏览器的 Angular 来看,

当用户点击 Stripe 登录链接时

-> 向 Stripe 的授权页面发出请求

-> 从 Stripe 接收一个包含表单的页面

当用户提交 Stripe 表单时

-> 请求 Stripe 提交表单

-> 从 Stripe 收到 302,重定向到您应用的重定向 url(包含授权码)

-> 向您的服务器发出请求

-> 从您的服务器接收一个新页面

请随时评论/更正。

关于javascript - 实现 Oauth。第三方认证后应该重定向到哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52068116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com