Поток предоставления OAuth - срок действия токенов

Я разрабатываю приложение для Android, использующее REST API Outlook Calendar. Я пытаюсь синхронизировать и обновлять календари нескольких пользователей (конференц-залы).

Мои вопросы:

1) Через сколько времени истечет первоначальный код авторизации?

2) А вместо этого токена обновления?

токен доступа истекает через 60 минут. Я не могу получить, если срок действия токена обновления истекает через 6 часов, 14 дней или 90 дней.

3) Последний настраивается? Могу ли я сделать так, чтобы срок его действия не истек?

`

ОБНОВЛЕНИЕ: (с https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx)

«Срок действия токена обновления не предоставляется и зависит от параметров политики и времени, когда предоставление кода авторизации отменяется Azure AD. Приложение должно ожидать и обрабатывать случаи, когда запрос нового токена доступа завершается ошибкой. В этом случае , он должен вернуться к коду, который запрашивает новый токен доступа ".

А также: (из http://blogs.msdn.com/b/exchangedev/archive/2014/03/25/using-oauth2-to-access-calendar-contact-and-mail-api-in-exchange-online-in-office-365.aspx) «У токенов обновления не указано время жизни. Обычно время жизни у токенов обновления относительно велико. Однако в некоторых случаях токены обновления истекают, они отозваны или не имеют достаточных привилегий для желаемого действия. Клиентскому приложению необходимо правильно ожидать и обрабатывать ошибки, возвращаемые конечной точкой выдачи токенов. Когда вы получаете ответ с ошибкой токена обновления, отбросьте текущий токен обновления и запросить новый код авторизации или токен доступа. В частности, при использовании токена обновления в потоке предоставления кода авторизации, если вы получили ответ с кодами ошибок Interaction_required или invalid_grant, сбросьте refre sh token и запросите новый код авторизации. "

Итак, как я могу гарантировать, что в мое приложение всегда будут входить все пользователи?

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

Спасибо


person Gabe    schedule 12.02.2016    source источник


Ответы (2)


Ответы:

  1. несколько минут. Точное значение является деталью реализации и может измениться в любой момент. Вы должны сделать все возможное, чтобы активировать код, как только вы его получите.
  2. см. http://www.cloudidentity.com/blog/2015/03/20/azure-ad-token-lifetime/
  3. на сегодняшний день срок жизни не может быть изменен. Мы работаем над функциями, которые предоставят вам больший контроль, но в настоящее время у нас нет ETA, чтобы поделиться

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

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

person vibronet    schedule 13.02.2016
comment
Теперь это так. Спасибо! - person Gabe; 20.02.2016

Что вы можете сделать, так это получить refresh_token и access_token. Получите доступ к тому, что вам нужно, через access_token, если это не удается, предположите, что срок его действия истек, и используйте refresh_token для обновления access_token. Если пользователь меняет свой пароль (или, может быть, есть другие случаи), вы запускаете пользователя с нуля.

Чтобы получить refresh_token, я думаю, вам нужно добавить offline_access в свою область видимости. Что-то вроде этого:

USER_OAUTH2_AUTHORIZE_URL
    + "?client_id=" + config.getClientId()
    + "&redirect_uri=" + getOutlookLoginRedirect(request)
    + "&response_type=code"
    + "&scope=https%3A%2F%2Foutlook.office.com%2Fmail.send%20" +
             "https%3A%2F%2Foutlook.office.com%2Fmail.readwrite%20" + 
             "offline_access%20openid%20email%20profile"
person Travis Hummel    schedule 22.04.2016
comment
По очень странной причине я получаю refresh_token только при указании offline_access области видимости. Это где-то задокументировано? - person Andrey Gordeev; 15.08.2018