我正在开发一个工具,嵌入一个外部应用程序的iframe。这个外部应用程序的身份验证是通过SAML和Keycloak。然而,当使用iframe时,SAML请求Keycloak不起作用:“…已经被CORS策略阻塞:没有'Access-Control-Allow-Origin'头在请求的资源上存在。
场景1:使用浏览器访问外部应用程序(正常方式)
我被重定向到key斗篷登录页面,成功认证后,它重定向到外部应用程序,一切工作正常。
场景2:使用iframe加载外部应用程序
加载iframe并显示Keycloak登录页面。然而,在输入凭证之后,由于CORS问题,触发的对key斗篷的SAML请求被阻止(参见)
在iframe中SAML请求Keycloak失败。
一旦我点击失败的URL(以“saml?SAMLRequest=…”开始),并访问它的正常方式(浏览器),一切工作正常。
我在多个网站上读到,例如这里的Keycloak访问控制-允许起源,你必须输入你的网页(在这种情况下localhost:8080)到Keycloak接口内的Web起源字段。这个只在客户端协议中选择openid-connect值时存在。因此,当从openid-connect切换到我使用的SAML时,Web Origin字段消失了。我甚至试图为key斗篷客户端导出配置文件,以手动进入webborigin属性,这也不工作。
我如何改变这个iframe的CORS策略时使用SAML(不是openid-connect),因为我没有访问Web Origin字段?
提前谢谢!
###默认情况下,key斗篷不允许在iframe中加载。
key斗篷管理员必须在域设置->安全防御->报头-> x - frame -选项中明确地允许每个域。在您允许Keycloak进入iframe之前,请确保您了解所有的安全后果。这是一个安全设置。