Вкладка Microsoft Teams Внешний OAuth

Вопрос или проблема

Я интегрировал свое веб-приложение как вкладку приложения для команд. Мое приложение поддерживает Google OAuth. Я настроил весь процесс аутентификации, чтобы он выполнялся в контексте команд.

Все работает без проблем, если аутентификация происходит из веб-версии команд. Но если я использую десктопное приложение команд, я получаю все URL для глубоких ссылок и authid, но после успешного завершения аутентификации Google браузер не закрывается автоматически, хотя токен я получаю в своем приложении команд.

Я просто не уверен, как закрыть вкладку, которая была открыта командами.

Код на стороне клиента:

// Этот код используется для инициации процесса аутентификации

authentication.authenticate({
    url,
    height: 600,
    width: 800,
    isExternal: true,
  }).then((response) => {
    console.log(response);
    
  }).catch((error) => {
    console.log(error);
    // authentication.notifyFailure(error);
    return;
  });

Код на стороне сервера:

// Этот код является серверной частью, которая перенаправляет на URL глубоких ссылок, если открыто из клиента команд

try {
  
  const state = JSON.parse(decodeURIComponent(authDto.state));
  
  if (state.oauthRedirectMethod === 'deeplink') {
    const clientRedirectUrl: string = encodeURIComponent(state.hostRedirectUrl.replace('{result}', authDto.code));
    return clientRedirectUrl;
  }

  return process.env.FRONTEND_APP_BASE_URL + '/teams-auth-callback?code=" + authDto.code + "&provider=google';
} catch (error) {
  console.log(error);
  return process.env.FRONTEND_APP_BASE_URL + '/teams-auth-callback?error=true';
}

Ответ или решение

Microsoft Teams Tab External OAuth: Закрытие вкладки после аутентификации

Интеграция вашего веб-приложения в качестве вкладки Teams – это отличное решение для более эффективного взаимодействия с пользователями. Однако, как вы заметили, возникла проблема при выполнении аутентификации Google OAuth через настольное приложение Teams. В этой статье мы рассмотрим, как корректно закрыть вкладку, использованную для аутентификации, после успешного получения токена.

Проблемы с аутентификацией в настольном приложении Teams

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

Возможные решения

  1. Использование window.close(): После того как вы получили токен на стороне клиента, вы можете попробовать закрыть открытое окно, используя метод window.close(). Однако это может не сработать в некоторых браузерах из-за политик безопасности, особенно если окно не было открыто с помощью JavaScript.

    Пример:

    if (response) {
       // Обработка успешного ответа
       window.close();
    }
  2. Изменение поведения аутентификации: Попробуйте перенаправить пользователя на страницу внутри вашего Teams-приложения, вместо того чтобы оставлять открытое окно. Это может быть достигнуто путем установки подходящего URL для redirect_uri, который будет обрабатывать успешную аутентификацию и перенаправлять пользователя обратно в Teams.

    Пример изменения на серверной стороне:

    return process.env.FRONTEND_APP_BASE_URL + '/teams-auth-callback?code=' + authDto.code + '&provider=google';
  3. Использование метода authentication.notifySuccess: Microsoft Teams предоставляет метод notifySuccess, который позволит уведомить Teams о том, что аутентификация завершена успешно, и вы можете закрыть окно.

    Пример:

    authentication.authenticate({
       url,
       height: 600,
       width: 800,
       isExternal: true,
    }).then((response) => {
       console.log(response);
       // Здесь вы можете использовать notifySuccess
       authentication.notifySuccess(response.state);
       window.close(); // Закрывает вкладку, если это возможно
    }).catch((error) => {
       console.log(error);
       authentication.notifyFailure(error);
       return;
    });
  4. Обработка состояния аутентификации: Убедитесь, что вы правильно обрабатываете состояния и события аутентификации. Могут быть полезны дополнительные проверки для удостоверения в том, что токен получен корректно до вызова метода закрытия окна.

Заключение

Проблема с закрытием вкладки после аутентификации в Microsoft Teams может быть решена различными методами, включая использование window.close() и методов, предоставляемых SDK Teams. Важно тестировать каждое решение, чтобы убедиться в его корректном функционировании в контексте настольного приложения.

Если у вас есть дополнительные вопросы или требуется консультация по конкретным аспектам реализации, не стесняйтесь обращаться за помощью. Удачи в разработке вашего приложения!

Оцените материал
Добавить комментарий

Капча загружается...