Обновить токен, не возвращенный для учетных записей Office365, приобретенных через GoDaddy

Фон

У нас есть функция, которая синхронизирует записи календаря и контакты между нашим приложением и Office365, используя Apis Office365 REST apis, обозначенный здесь. Мы используем Версия 1 API. Для авторизации мы выполняем авторизацию через Azure AD в виде схемы здесь.

Проблема

В обычном случае (при использовании учетных записей Office365, приобретенных непосредственно у Microsoft), наша система работает так, как ожидалось: мы можем обновить токены пользователя, когда они истекают, и взамен получают новый токен доступа и обновления.

Во втором случае при тестировании с помощью учетных записей Office365 приобретенных через GoDaddy, мы сталкиваемся с проблемой блокировки, которая может быть описана в этой серии шагов: 1. Пользователь отправляется с нашего приложения → Страница входа в Office365. 2. Пользователь вводит адрес электронной почты 3. Пользователь перенаправляется на страницу входа в GoDaddy Office365. 4. Пользователь завершает авторизацию и перенаправляется обратно в наше приложение с кодом доступа в ответе. 5. App Exchange обмена код доступа для access_token и refresh_token из Office365. 6. Пройдет некоторое время, и access_token истекает 7. Приложение обновляет пользователя access_token с помощью refresh_token

Ожидаемое поведение

В этот момент мы ожидаем получить новый access_token, а также новый refresh_token, как и при использовании обычной учетной записи Office365

Фактическое поведение

Только для аккаунтов, приобретенных через GoDaddy, мы не получаем новый токен обновления в ответе после обновления в первый раз.

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

Маршрутизаторы Postman (могут сохранять как .json и импортировать Postman для отладки https://gist.github.com/drunkel/7ec66ed33f66d0070148694651699d03 (идентификаторы и секреты были удалены)

Вопрос:

  • Это известная проблема?
  • Есть ли обходной путь?

Ответ 1

Я инженер-программист в GoDaddy и могу подтвердить, что эта проблема решена. Причина более частых запросов на вход в Modern Authentication заключается в том, что, поскольку они являются пользователями федерации и, как вы упомянули в своем вопросе, токен обновления не был возвращается. Это вызвано атрибутом StsRefreshTokensValidFrom на AAD, который не обновляется должным образом.

Ответ 2

Каждый поставщик может решить, как реализовать свой собственный сервер oAuth с определенными политиками, как действовать с определенным типом гранта и политиками о предоставлении/отзыве токенов токена обновления/идентификатора токена/доступа и их свойств времени жизни.

Это известная проблема с go daddy при покупке офисных счетов 365. см. здесь, а также здесь и здесь.

Итак, похоже, GoDaddy решила реализовать свой сервер OAuth с ограниченной политикой безопасности об обновлении токенов, не включив и не отправив обратно токен обновления в API, вызывающий аутентификацию и авторизацию OAuth, когда вы покупаете учетные записи Office 365 через GoDaddy.

Это расширение/блокировка безопасности, чтобы отключить ваше приложение, чтобы не хранить токен обновления обновления, который может быть вечен (если обновлен) в эти офисы 365 аккаунтов, приобретенных на Godaddy

Обычно серверы OAuth, реализованные с интеграцией с каталогом Azure Active, имеют следующее время жизни токена (но вы можете изменить и решить переопределить настраивать их по-другому. Сторонняя версия реализует собственный сервер со своими собственными политиками в отношении токенов )

Еще одна важная особенность, которую Go Daddy не поддерживает многофакторную аутентификацию (mfa) для аккаунтов офиса 365, найденных здесь.

  • Политика жизни Azure: Azure Active Directory Настраиваемые свойства ресурса токена

  • Еще одна важная проблема заключается в том, что если вы хотите продолжить обновление токена, когда пользователь находится в автономном режиме, вы должны попросить пользователя access_type = "offline" , поэтому во время время бездействия от пользователя, вы можете продолжать обновлять токен и хранить длинный токен для учетной записи.

  • Если пользователь решает отозвать маркер по любой причине - токен немедленно истекает.

Еще одна проблема в описанных вами шагах:

  • Пользователь отправляется с нашего приложения → Страница входа в Office365.
  • Пользователь вводит адрес электронной почты
  • Пользователь перенаправляется на страницу входа в GoDaddy Office365. , так что теперь токен обновления для офиса 365 перетекает с сервера на серверы Godday.
  • Пользователь завершает авторизацию и перенаправляется обратно в наше приложение с кодом доступа в ответе. (но без токена обновления, полученного на последнем шаге сервера до сервера. Godaddy для обеспечения безопасности от имени 365 учетных записей сохраняет его сам и не возвращает его конечному пользователю.
  • Приложение обменивает код доступа для access_token и refresh_token из Office365. 6. Пройдет некоторое время, и access_token истечет. 7. Приложение обновляет пользователя access_token с помощью refresh_token