Вызов токена блокируется в скрытых фреймах Angular 8+

      Configuration:
    "@azure/msal-angular": "^1.1.2",
    "msal": "^1.4.4",
    "rxjs": "~6.4.0",
     Angular 8+


export const msalConfig: Configuration = {
  auth: {
    clientId: environment.msalModule.clientID,
    authority: environment.msalModule.authority,
    redirectUri: environment.msalModule.redirectUri,
    validateAuthority: true,
    postLogoutRedirectUri: environment.msalModule.redirectUri,
    navigateToLoginRequestUrl: true
  },
  cache:
  {
    cacheLocation: 'localStorage',
  }
}

export const angularConfig: MsalAngularConfiguration = {
  popUp: false,
  consentScopes: [
    'user.read',
    environment.msalModule.appScope
  ],
  protectedResourceMap: protectedResourceMap
}

У меня есть приложение Angular с указанной выше конфигурацией. Я использую MsalInterceptor из библиотеки msal-angular. После входа в окно Microsoft я перенаправляюсь в приложение, где получаю сообщение об ошибке: «Токен-вызовы блокируются в скрытом iframe», а после этого один другой «Не удалось обновить токен из-за таймаута». Проблема заключается в том, что метод acquTokenSilent не работает. Я видел, что у большего количества людей была эта проблема, и это описано здесь: https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/1194. Эта ошибка существует, даже если у пользователя есть токен в localStorage. Я подумал, что, возможно, это просто предупреждение, и я могу поймать ошибку и действовать как пользователь, который вошел в систему, но нет, потому что у некоторых пользователей фактически нет токена, а затем приложение разваливается. Есть ли кто-нибудь, у кого была подобная проблема и занималась этим?

1 ответ

Ошибка возникает, когда вы обнаруживаете, что ваше приложение вызывает AcquireTokenSilent при загрузке страницы внутри этого iframe, чтобы предотвратить возникновение каких-либо плохих побочных эффектов (например, бесконечных попыток получения токенов). Предложение, перечисленное в этом потоке, состоит в том, чтобы не вызывать AcquireTokenSilent при загрузке страницы, когда в URL-адресе есть хэш, а ваше приложение находится внутри iframe.

Другие вопросы по тегам