Ошибка перекрестного источника потока проверки подлинности команд Microsoft

#authentication #microsoft-teams

Вопрос:

Я получаю следующую ошибку, когда выполняю проверку подлинности в командах Microsoft. Вызов getContext никогда не возвращается при вызове. Обратите внимание, что эта страница открывается во всплывающем окне при вызове с помощью приведенного ниже кода. Все это прекрасно работает при запуске в браузере, но не работает в настольном приложении.

Открывает всплывающее окно авторизации:

 function getToken() {
  return new Promise((resolve, reject) => {
    microsoftTeams.authentication.authenticate({
      url: window.location.origin   '/Auth/Start',
      width: 600,
      height: 535,
      successCallback: (result) => {
        resolve(result);
      },
      failureCallback: (reason) => {
        $('#loginBtn').show();
        console.log('Auth/Start failed for '   reason);
        reject(reason);
      },
    });
  });
}
 

Код в AuthStart:

             microsoftTeams.initialize();
            // Get the tab context, and use the information to navigate to Azure AD login page
            microsoftTeams.getContext(function (context) {
                // Generate random state string and store it, so we can verify it in the callback
                const state = '@ViewBag.State';
                localStorage.setItem("simple.state", state);
                localStorage.removeItem("simple.error");
                // See https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-implicit
                // for documentation on these query parameters
                let queryParams = {
                    client_id: clientId,
                    response_type: "id_token token",
                    response_mode: "fragment",
                    scope: '@ViewBag.GraphApiScopes',
                    redirect_uri: window.location.origin   "/Auth/End",
                    nonce: '@ViewBag.Nonce',
                    state: state,
                    // login_hint pre-fills the username/email address field of the sign in page for the user,
                    // if you know their username ahead of time.
                    login_hint: context.upn
                };
                // Go to the AzureAD authorization endpoint
                let authorizeEndpoint = "https://login.microsoftonline.com/"   context.tid   "/oauth2/v2.0/authorize?"   toQueryString(queryParams);
                window.location.assign(authorizeEndpoint);
            });
 

Ошибка в отладчике:
VM216:1 Неперехваченное исключение DOMException: Заблокирован кадр с исходным кодом «https://mgr360dev.azurewebsites.net» от доступа к кадру перекрестного происхождения.
при оценке (оценка в d (https://statics.teams.cdn.office.net/sdk/v1.9.0/js/MicrosoftTeams.min.js:1:38246), :1:36)
в объекте.d [как инициализировать] (https://statics.teams.cdn.office.net/sdk/v1.9.0/js/MicrosoftTeams.min.js:1:38246)
в https://mgr360dev.azurewebsites.net/Auth/Start:15:28

Комментарии:

1. Оказывается, ошибка перекрестного происхождения не является проблемой. В принципе, любой звонок в Microsoft, который я делаю, не работает. Я удалил все вызовы в Auth/Start для команд Microsoft, успешно прошел аутентификацию, а затем вернулся в AuthEnd. Просто вызов microsoftTeams.authentication.notifySuccess вернет ошибку CancelledByUser. Это происходит только в настольном приложении, которое терпит неудачу. В Chrome и Edge это работает нормально. Если я нажму на всплывающую стрелку полного окна, то она также будет работать с рабочего стола. Не уверен, что является причиной этого.

2. Брэд — Не могли бы вы, пожалуйста, попробовать с последним пакетом: statics.teams.cdn.office.net/sdk/v1.10.0/js/… Дайте нам знать, если у вас все еще возникнут какие-либо проблемы.

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

Ответ №1:

Перемещение ответа из раздела комментариев:

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