似乎让所有浏览器都满意是一项具有挑战性的任务,因为它们增加了所有的安全性以及证书的复杂性。
我有一个 SPA (Vuejs)oidc-client.js
用于实现 OIDC,与 Identity Server (Identity Server 4) 通信。首先要注意的是,如果我在 localhost 上同时运行客户端和服务器,一切正常。
当我将 Identity Server 部署到我们网络中的 Staging Server 时,事情就出了问题。因此,Idp 的主机名现在与 SPA 的主机名不同(这在生产中是正常的)。
经过大量工作,除了 IE11(是的 IE)之外,我已经完成了所有工作。我必须做几件事才能到达那里,例如:
- 解决 Chrome 的同站 cookie 问题
- 创建自签名证书并在 Trusted Certificates 中安装根证书
- 在客户端添加 Babel 配置代码和 Core.js,使 IE 在 Promise 生效时不会抛出错误
我只是不明白为什么 IE 会这样做。
无法使用开发工具查看任何信息。
服务器上的日志不包含任何似乎相关的信息。
有没有其他人在 IE 中看到这些“浏览器症状”。
如果人们认为这会有所帮助,很乐意提供更多信息(代码、日志等)。只是不想在最初的问题中倾倒所有这些,因为很多人不喜欢这样。
这是几个 Fiddler 屏幕截图。第一个来自Chrome: 第二个来自IE11。
出于某种原因,IE11 一次又一次地调用静默刷新。
我想我可以看到正在发生的事情,但不知道如何解决它。
似乎有 2 次对Authorize
端点的调用失败,明显缺少.AspNetCore.Antiforgery
cookie。这导致 2 次调用silent-refresh.html
。
然后,由于某种原因,对 Idp 的基本 url 有一些 GET 请求之王,紧随该请求之后是对具有cookie的Authorize
端点的请求。.AspNetCore.Antiforgery
船被设置直,直到下一次呼叫Authorize
端点,即下一个循环的开始。
但是,对于Chrome,在用户登录后,对Authorize
端点的下一次调用确实包含 cookie。
所以,我想问题是缺少 cookie。
也许这与我在这篇文章中用于解决 Chrome samesite
cookie 问题的代码有关?
干杯