phl*_*ton 3 redirect google-chrome content-security-policy
我正在实现一个 OpenID Connect 客户端 Web 应用程序。用户在身份提供商中成功进行身份验证后,他们将被重定向回我的 Web 应用程序。一旦它们到达,根据某些查询参数的值,它们将被重定向到 URL。当发生重定向时,Chrome 会在控制台中抛出此错误:
Refused to send form data to 'https://my-domain-a.com/' because it violates the following Content Security Policy directive: "form-action 'self' https://my-domain-b.com/receive-token".
经过一番谷歌搜索后,我尝试添加Content-Security-Policy标题:
content-security-policy: form-action 'self' https://my-domain-a.com
这似乎没有任何影响,我仍然收到此消息。
我有两个问题:
我该如何解决?
为什么 Chrome 会在301重定向时抛出此错误?
经过多次谷歌搜索(和脏话)后,我弄清楚了为什么会发生这种情况,以及(丑陋的)修复。
在我的实验中,我注意到所有 Chromium 浏览器后代(Chromium、Chrome 和 Vivaldi)都有这个问题。非 Chromium 浏览器后代(Firefox 和 Safari)则没有。事实证明,身份提供商正在设置内容安全策略指令:form-action 'self' https://my-domain-b.com/receive-token。由于我的浏览器从身份提供商重定向my-domain-b.com到my-domain-a.comChromium 后代,因此将重定向标记my-domain-b.com为my-domain-a.com违反了身份提供商设置的内容安全策略。不幸的是,我不太了解规范,无法说出不同浏览器表现出的两种行为中哪一种是最正确的......
我通过做了一个有点丑陋的黑客解决了这个问题。而不是进行301重定向my-domain-b.commy-domain-a.com我to进行重定向,而是my-domain-b.com渲染了一个简单的 HTML 页面并立即提交到my-domain-a.com:
<html><body onload="window.location='https://my-domain-a.com?my_param=my_value'"/></html>
这个解决方案满足了 Chromium 后代,因为不再重定向到无法识别的域。就我而言,依赖 Javascript 是可以接受的,因为用户重定向到的网站是 Angular 应用程序,因此用户必须启用 Javascript。
| 归档时间: |
|
| 查看次数: |
3312 次 |
| 最近记录: |