我尝试访问 http://**/rest 上受 Shibboleth SAML Serviceprovider 保护的资源。为此,我对该地址进行了 XMLHttpRequest 调用。在资源服务器上设置了 CORS header ,如果没有 SAML 身份验证,一切正常。 但是,如果激活了 SAML 身份验证,我会在 Chrome 中收到以下错误:
XMLHttpRequest cannot load *****/rest. The request was redirected to 'https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO?SAMLRequest=********', which is disallowed for cross-origin requests that require preflight.
如果我查看网络控制台,我可以看到以下请求:
1.
Request URL:http://<resource_server>/rest
Request Method:OPTIONS
Status Code:200 OK
2.
Request URL:http://<resource_server>/rest
Request Method:GET
Status Code:302 Found
Response-Header: Location:https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO?SAMLRequest=*****
因此似乎重定向将被初始化,但由于上述错误而停止。
有没有人知道我如何让它工作?
问候
菲利普
最佳答案
302 响应不是错误。这就是受 SAML 保护的资源请求身份验证的方式:通过将用户重定向到身份提供者。但是,由于您正在进行 AJAX 调用,因此浏览器无法按照重定向进行身份验证。
假设通用 Web 浏览器 SSO 配置文件:浏览器客户端需要在支持 http://**/rest 的同一应用程序中建立身份验证 session 在进行 AJAX 调用之前。大多数身份验证 session 状态都是使用 cookie 管理的,所以我希望一旦您拥有应用程序的 session cookie,对 http://**/rest 的请求+ session cookie 将导致成功。
还有增强型客户端或代理 (ECP) 配置文件。这将需要将身份验证 SAML 负载从 IDP 传递到资源 - 请参阅规范 https://www.oasis-open.org/committees/download.php/35389/sstc-saml-profiles-errata-2.0-wd-06-diff.pdf .
关于Javascript 和 SAML 重定向失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31242686/