Передача токена авторизации Azure AD из контейнерного веб-приложения во встроенное (iFrame)

У меня есть:

  1. Веб-приложение с настроенной проверкой подлинности Azure (Javascript с adal.js)
  2. Второе приложение, встроенное в первое как iFrame (Javascript)
  3. Второе приложение должно иметь возможность вызывать другой веб-API с аутентификацией Azure, развернутой в Azure (возможно, в другом домене).

Вопрос: возможно ли получить токен авторизации AAD (из первого (контейнерного) приложения во второе? Если да, буду очень признателен за любые руководства/примеры.


person Alexander Safoshkin    schedule 26.10.2016    source источник


Ответы (1)


Мы можем сообщать два окна из локального, используя Window.postMessage метод. Ниже приведен простой пример для имитации процесса получения токена с родительской страницы. Вы можете изменить его, чтобы проверить домен на основе соображений безопасности:

ContainerPage1.Html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <iframe src="InnerPage.html"></iframe>
    <script>
        var token = "abc";
        window.addEventListener("message", receiveMessage, false);

        function receiveMessage(event) {
            if (event.data === "accquireToken")
                event.source.postMessage(token,"*");
        }

    </script>
</body>
</html>

InnerPage.Html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <script>  

    window.addEventListener("message", receiveMessage, false);

    function receiveMessage(event) {
        alert(event.data)
    }

    function accquireToken() {
        window.parent.postMessage("accquireToken","*");
    }

    </script>

    <input id="Button1" type="button" value="Accquire Token" onclick="accquireToken()" />
</body>
</html>
person Fei Xue - MSFT    schedule 27.10.2016