Авторизация к внешней службе через Office API: диалоговое окно просто закрывается после перенаправления во время Office. js инициализация - PullRequest
0 голосов
/ 28 апреля 2020

Имеет надстройку Office для Outlook Web. Мне нужно реализовать логин логина c для внешнего сервиса с помощью следующих шагов:

  1. Показать мою страницу (шлюз. php) в отдельном окне
  2. Перенаправить на аутентификацию внешнего сервиса page
  3. Перенаправление на мою страницу, получение кода аутентификации и уведомление родительского приложения.

Использование документов из MS Dev Center Аутентификация и авторизация с помощью диалогового окна Office API и Использование диалогового API Office в надстройках Office

И надстройка, и шлюз. php страницы находятся в одном домене / субдомене. Домены приложений в манифесте обновлены. HTTPS используется. Нет пользовательских портов. Это не localhost.

Проблемы возникают на этапе 3: диалоговое окно просто закрывается без каких-либо уведомлений или ошибок после его перенаправления обратно со страницы аутентификации внешней службы. Событие Office.EventType.DialogEventReceived перехватывается в родительском окне, но с кодом ошибки 12006 «Диалог закрыт пользователем». Пока ожидается Office.EventType.DialogMessageReceived. После некоторой отладки кажется, что следующий код из библиотеки . js отвечает:

var initialize = function OSF__OfficeAppFactory$initialize() {
    _retrieveHostInfo();
    _retrieveLoggingAllowed();
    if (_hostInfo.hostPlatform == "web" && _hostInfo.isDialog && window == window.top && window.opener == null) {
        window.open('', '_self', '');
        window.close(); //<--- this what closes my window
    }

И причина этого в том, что из-за перенаправления на страницу внешнего сервиса (который находится за пределами моего домена) window.opener равно нулю. :( И я просто не могу найти, как это должно работать в моем случае.

Моя страница после перенаправления очень проста - просто сценарий для Office, но он даже не достигнут. Страница закрыта гораздо раньше.

<html>
<head>
   <script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.debug.js"></script>
</head>
<body>

<script lang="js" type="text/javascript">   
  if (typeof Office !== 'undefined'){
        Office.onReady(info => {
                const messageObject = {message: "CODE_FROM_GET_PARAM"};
                const jsonMessage = JSON.stringify(messageObject);
                Office.context.ui.messageParent(jsonMessage);
      });
    } else {
        console.warn("Office failed");
    }
    </script>
</body>

</html>

Для случая перенаправлений внутри моего домена - все работает просто отлично. Родитель уведомлен без проблем.

Есть идеи, как это должно работать в случае перенаправления на внешние домены? На основе Аутентификация и авторизация с помощью диалогового интерфейса Office должны.

Спасибо

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