【发布时间】:2016-07-18 21:55:35
【问题描述】:
我在尝试使用 SAML 2.0 对访问进行身份验证时遇到 CORS 错误,我完全不知所措。
我们有一个后端 Web 服务器,它提供 3 个不同的路径 /html /js 和 /services。
我们已经定义了一个 SAML ID 提供者,导入了 IDP 元数据并在服务器端配置了一个服务,其中
服务 url 已设置为 /html。这会生成一些已在 IDP 世界端注册的元数据 xml。
从新浏览器开始,用户输入https://host:port/html 和联合登录页面
出现。用户登录,后端服务器返回会话cookies,剩余的请求给/js和/services顺利进行。
现在,当用户关闭浏览器并重新打开它时,HTML、JS/CSS 将从浏览器缓存中提供出来。第一次出境
从应用程序到后端服务器的请求是到 /services/a-service-name 并且失败并显示以下内容:
XMLHttpRequest cannot load https://fed.xxx.com/fed/idp/samlv20?SAMLRequest=some-charater-string.
No 'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'https://my-host:port' is therefore not allowed access.
NETWORK ERROR; xhr= 0 error ; settings= GET /services/a-service-name <<<<<<<<<< this print is from my app
什么给了?我是否需要在我的后端服务器端创建 3 个服务提供者(即/html、/js、/services)?或者,我的
应用程序需要捕获和解释 SAML 请求吗?
由于我是 SAML 的新手,我将不胜感激。
----编辑1
根据 Anders Abel 的回答,我们将以下内容添加到 index.html
<script>
if(window.location.search.length == 0){
window.location = "index.html?"+Math.random();
}
</script>
这会强制命中指定的 SP,触发与联邦的 SAML 对话并强制登录,除非用户已经登录。谢谢!
【问题讨论】: