【发布时间】: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 以防影响库推荐。
【问题讨论】: