Библиотеки ADAL / MSAL JS с Angular 2+ и имеющие дело с iFrames - PullRequest
0 голосов
/ 29 декабря 2018

Я работаю над приложением Angular (7.0) SPA и хочу реализовать вход в Azure AD для аутентификации и авторизации и использует .NET Core 2.1 API.

Приложение Angular (на данный момент) состоит из 3Компоненты - home, login и redirect.

  • Домашний компонент защищен Route Guard - если пользователь не вошел в систему, он перенаправляется на компонент входа.

  • Компонент входа проверяет, вошел ли пользователь в систему - если он не перенаправлен на страницу входа Microsoft.

  • Если вход выполненуспешно, он перенаправляется на компонент перенаправления , который затем отправляет пользователя на страницу по умолчанию, которая является домашней страницей.

Пока что все прекрасно работает без каких-либо проблем.Проблемы начинают возникать, когда я пытаюсь получить токен доступа для моего .NET Core API.

adal-angular4

//HTTP Interceptor
this.adal.acquireToken(resource) ...

@ azure / msal-angular

//HTTP Interceptor
this.msal.acquireTokenSilent(scopes) ...

Пока я получаю токены, а HTTP Interceptor без проблем присоединяет токены-носители, при выполнении этих функций они создают новый экземплярapp

<html>
<head>...</head>
<body>
<app-root>...</app-root>
<script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="polyfills.js"></script>
<script type="text/javascript" src="styles.js"></script>
<script type="text/javascript" src="vendor.js"></script>
<script type="text/javascript" src="main.js"></script>
<iframe id="msalRenewFramehttps://address.net/.../..." src="https://login.microsoftonline.com/...">
    <html>
    <head>...</head>
    <body>
    <app-root>...</app-root>
    <script type="text/javascript" src="runtime.js"></script>
    <script type="text/javascript" src="polyfills.js"></script>
    <script type="text/javascript" src="styles.js"></script>
    <script type="text/javascript" src="vendor.js"></script>
    <script type="text/javascript" src="main.js"></script>
    </body>
    </html>
</iframe>
</body>
</html>

Это означает, что если у меня есть какая-то фоновая задача на домашней странице, которая запускается в конструкторе, оба экземпляра начнут выполнять эти задачи и попадать на сервер.

Когда дело доходит до ADAL.JS, есть два предложения относительно того, как решить проблему , однако ни одно из них не применимо к Angular 2 +.

Одно из возможных решений для этогобудет происходить каждый раз, когда токен будет получен / обновлен для удаления iframe из HTML, однако это выглядит как довольно плохое решение.

Я на 100% уверен, что адреса перенаправления верны на портале Azure и в приложении Angular.

Боролся с этим на прошлой неделе.Любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...