跨域 HTTP POST 认证

Posted

技术标签:

【中文标题】跨域 HTTP POST 认证【英文标题】:Cross domain HTTP POST authentication 【发布时间】:2021-12-01 21:52:15 【问题描述】:

我们希望在两个 Web 应用程序之间实现一个简单的经过身份验证的 HTTP POST 集成,虽然 JWT 之类的东西应该可以工作,但它似乎有点过头了。

用例:

    应用程序 A 通过 https 向应用程序 B 发送一个带有隐藏表单和 target=_blank 的 POST。 应用程序 B 从 POST 正文中读取参数,对其进行验证和身份验证,并将用户重定向到应用程序 B 中的正确内容。

应用程序 B 的会话 cookie 使用 SameSite=None 进行持久化,以捕获同一浏览器中的现有会话。 可以假设应用程序 A 和 B 的服务器位于不同的受限环境中,因此所有流量都必须通过浏览器。 我想避免交换证书,如果足够的话,基于简单文本的共享或非对称密钥将是理想的。

我们已经有另一个集成,发件人发送以下内容:

有效载荷 时间戳 结合有效负载、时间戳和共享密钥的哈希

接收方检查发送的哈希是否与接收方计算的哈希匹配,因此本质上是一个带有时间戳的 HMAC,以防止存储重复(但不保护重复,在这种情况下很好)。我认为添加一个缓存在接收端的随机数可以防止欺骗,并且在我们验证每个请求时忽略 CSRF,但看起来这是一个已经被更有资格的人解决的问题,我应该使用现有的标准或实施。

有什么建议吗?我们使用 .NET 以防影响库推荐。

【问题讨论】:

【参考方案1】:

经过进一步研究,我们将使用 TOTP (Time-based One-Time Password)。它满足我们所有的要求,只需要在两端配置一个共享密钥,并且有很多现有的库可以使用。

【讨论】:

以上是关于跨域 HTTP POST 认证的主要内容,如果未能解决你的问题,请参考以下文章

angular.js跨域post解决方案

javascript中跨域的http post请求

单点登录认证原理及跨域cookie共享

中止请求和超时 跨域的HTTP请求 认证方式 JSONP

angularjs简单实现$http.post(CORS)跨域

web跨域问题(java) 跨域请求