OpenID: unauthenticated POST 认证后变为GET

OpenID: unauthenticated POST becomes GET after authentication

我正在为我的应用试用 OpenID Connect,但有一个我无法支持的特定工作流程。

我有一个 "Add to cart" 按钮可以向 HTTP 服务器发出 POST 请求。如果用户未通过身份验证,则用户将转到身份提供者进行身份验证。但是,在用户通过身份验证后,身份提供者使用 GET 将浏览器重定向到 redirect_uri,这意味着我的应用程序丢失了用户想要购买的商品的上下文。

我能想到的唯一选择是在用户登录之前隐藏 "Add to cart" 按钮,但这似乎是 OpenID 的一个重要限制。还有其他解决方案吗?

重定向总是会变成 GET 请求,在重定向的情况下无法保留 POST 的正文。所以你几乎没有什么可以做的

  1. 显示登录而不是添加到购物车

  2. 登录重定向 URI 应该有一个获取特殊添加到购物车 URL 的请求,其中包含足够的信息。所以基本上是一个额外的 GET 端点,而不仅仅是 POST 用于将产品添加到购物车

  3. 允许在未经身份验证的情况下管理购物车,这是大多数电子商务解决方案都会做的事情

If the user is not authenticated, the user goes to the Identity Provider to be authenticated.

这是您丢失 POST 信息的第一个重定向。

因此,当决定必须重定向用户时,您需要将 POST 数据存储在会话中,并在用户登录后提取它们。