iframe, если пользователь прошел аутентификацию внутри iframe, чем перенаправление родительского окна - PullRequest
0 голосов
/ 15 апреля 2020

Сценарий -

Сайт X хочет получить доступ к сайту Y, используя iframe, оба были расположены на другом сервере.

Что достигнуто до сих пор -

X смог получить доступ к Y с помощью iframe, добавив

Header always append Content-Security-Policy "frame-ancestors https://X.com/ "; в файл .htaccess Y.

Проблема с сайтом X -

1. X пользователь использует код iframe для ввода имени пользователя и пароля после нажатия кнопки «Отправить». X хочет, чтобы родительское окно было перенаправлено на сайт Y, если аутентификация прошла успешно.

(Я смог перенаправить родительское окно только через https://help.surveygizmo.com/help/break-out-of-iframe), но не с действительной авторизацией.

2. Если 1 невозможно с iframe мы можем открыть Y в новой вкладке, если входные данные были действительной аутентификацией?

3. Если оба 1,2 терпят неудачу

У меня есть идея реализовать этот подход, используя Javascript, создав форму HTML для входа в систему с type=post action=Y.com/checkUserInYdb и создав конечную точку в Y, в которой имя пользователя и пароль ssword может быть аутентифицирован, и в ответе X может знать, является ли это действительным вызовом или нет для перенаправления с использованием AJAX вызова? Однако в этой идее отсутствует реализация iframe на основе аутентификации.

Может кто-нибудь предложить правильный способ сделать это?

1 Ответ

0 голосов
/ 17 апреля 2020

То, как мы реализовали iframe, было достаточно безопасным, поскольку в нем не хранится никакая учетная информация для связи между источниками между двумя серверами.

Оба приложения будут взаимодействовать друг с другом, используя postMessage https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

Сайт X iframe code

<iframe src="https://Y.com/" width="500" height="400" id='myIframeId'></iframe>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

<script>
    $('iframe').load(function() {
        var destination = document.getElementById("myIframeId").contentWindow;
        destination.postMessage('iframeLoginRequest','*'); // will pass data from X to Y
    });

</script>

Сайт Y Javascript код

<script type="text/javascript">
        var eventMethod = window.addEventListener ?
            "addEventListener" :
            "attachEvent";
        var eventer = window[eventMethod];
        var messageEvent = eventMethod === "attachEvent" ?
            "onmessage" :
            "message";
        eventer(messageEvent, function(e) {
            //data you receive from parent is stored inside e.data
            if(e.data == 'iframeLoginRequest'){
             $('.testimonial-container').remove();  //remove extra things from login page 
             $('.btnlogin').click(function(){
                if($('#Username').val().length > 0 && $('#Password').val().length > 0 && $(".form-group").hasClass("has-error")==false) {
                    jQuery(".form-login-horizontal").attr("target","_blank");
                    jQuery(".form-login-horizontal").submit(); //submit the login form in a new tab parent window
                    return false;
                }
             });
            }
        });
        </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...