如何在嵌入式iframe中使用SimpleSAMLphp进行身份验证

如何在嵌入式iframe中使用SimpleSAMLphp进行身份验证,php,session,iframe,x-frame-options,simplesamlphp,Php,Session,Iframe,X Frame Options,Simplesamlphp,我们有一个完全由内部开发的平台,该平台使用SimpleSAMLphp对客户的用户进行身份验证,这些用户可以使用从Azure AD到G-Suite的任何东西。页面可以共享,允许我们的客户将页面的iframe版本嵌入到他们选择的平台中 问题是,由于同一来源的X-Frame-Options和跨域iframe安全性,Microsoft和Google不再允许其登录页面出现在iframe中 嵌入URL包含一个加密的组织标识符,因此我们知道将它们指向哪个身份验证平台,但SimpleSAMLphp将它们重定向到

我们有一个完全由内部开发的平台,该平台使用SimpleSAMLphp对客户的用户进行身份验证,这些用户可以使用从Azure AD到G-Suite的任何东西。页面可以共享,允许我们的客户将页面的iframe版本嵌入到他们选择的平台中

问题是,由于同一来源的X-Frame-Options和跨域iframe安全性,Microsoft和Google不再允许其登录页面出现在iframe中

嵌入URL包含一个加密的组织标识符,因此我们知道将它们指向哪个身份验证平台,但SimpleSAMLphp将它们重定向到MS或Google登录页面,并且无法加载


如何从跨域iframe中开始使用SimpleSAMLphp进行身份验证?

答案是为用户提供一个按钮,该按钮将在其自己的新窗口中打开标准登录页面。因此绕过了跨浏览器安全性

var-mywin;
函数登录(){
mywin=窗口。打开(“https://my.login.page“我的名字”,“高度=600,宽度=600”);
}
函数closewin(){
mywin.close();
}
登录
此页面使用SimpleSAMLphp执行登录,然后设置身份验证
$\u COOKIE
,使用
window.opener.location.reload()
重新加载其打开程序。然后,iframed页面调用onunload
函数,关闭窗口

我发现这是最有用的方法。调用登录窗口
onload
会偶尔引起安全警报,因此用户启动的按钮似乎最合适。在重新加载新窗口的
开启器后,新窗口也会自动关闭,这会让用户在短时间内看不到任何东西。由于iframed页面可以访问打开的窗口,因此只有等到它重新加载后才能关闭窗口,从而
onunload
。随后,如果有人在登录完成之前手动重新加载或导航iframe的内容,则相应的窗口也将关闭