Как пройти аутентификацию с помощью SimpleSAMLphp во встроенном iframe

У нас есть платформа, полностью разработанная собственными силами, которая использует SimpleSAMLphp для аутентификации пользователей нашего клиента, которые могут использовать что угодно, от Azure AD до G-Suite. Страницами можно делиться, что позволяет нашим клиентам встраивать iframe-версию страницы в платформу по своему выбору.

Проблема заключается в том, что Microsoft и Google больше не позволяют своим страницам входа отображаться в iframe из-за параметров X-Frame-Options одного происхождения и междоменной безопасности iframe.

URL-адрес для встраивания содержит зашифрованный идентификатор организации, чтобы мы знали, на какую платформу аутентификации их направить, но SimpleSAMLphp перенаправляет их на страницу входа в MS или Google и не загружается.

Как я могу пройти аутентификацию с помощью SimpleSAMLphp, начиная с междоменного iframe?


person matteo    schedule 24.09.2020    source источник


Ответы (1)


Ответ заключался в том, чтобы предоставить пользователю кнопку, которая открывала бы стандартную страницу входа в систему в новом собственном окне. Поэтому в обход кроссбраузерной безопасности.

var mywin;
function login() {
    mywin = window.open("https://my.login.page", "my_win_name", "height=600,width=600");
}
function closewin() {
    mywin.close();
}
<button type="button" onclick="login()">Login</button>

Эта страница выполняет вход с помощью SimpleSAMLphp, затем устанавливает аутентификацию $_COOKIE, перезагружает его открыватель, используя window.opener.location.reload(). Затем страница iframe вызывает функцию onunload <body onunload="closewin()">, которая закрывает окно.

Я нашел, что это самый полезный подход. Вызов окна входа в систему onload вызывал случайные предупреждения системы безопасности, поэтому кнопка, инициируемая пользователем, кажется наиболее подходящей. Кроме того, когда новое окно закрывалось после перезагрузки его opener, оставался короткий период, когда пользователь вообще ничего не смотрел. Поскольку iframe-страница имеет доступ к открытому окну, имело смысл дождаться его перезагрузки, чтобы закрыть окно, таким образом, onunload. Впоследствии, если кто-то вручную перезагружает содержимое iframe или уходит от него до завершения входа в систему, соответствующее окно также закрывается.

person matteo    schedule 07.10.2020