2015-06-14 3 views
18

Мое мобильное приложение iOS использует сервисы, реализованные с протоколом OAuth2.0. Маркер доступа OAuth поставляется вместе с токеном обновления и полем expires_in. Я сохранил токен обновления и время истечения срока действия токена в своем приложении, но у меня нет хорошей идеи о том, когда их использовать.Как определить, истек ли токен OAuth?

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

ответ

29

Информация о токене OAuth 2.0.

Истекает В определении

Стандарт OAuth 2.0, RFC 6749, определяет expires_in поле как число секунд до истечения срока действия:

expires_in: Рекомендованный. Время жизни в секундах от токена доступа. Например, значение «3600» означает, что токен доступа истечет через один час с момента генерации ответа. Если этот параметр опущен, сервер авторизации ДОЛЖЕН предоставлять время истечения через другие средства или документировать значение по умолчанию.

маркеров Обновить Обработка: Метод 1

При получении действительное значение access_token, expires_in, refresh_token и т.д., клиенты могут обрабатывать это путем сохранения время истечения срока действия и проверки его на каждом запросе. Это можно сделать, выполнив следующие действия:

  1. обращенного expires_in к истекает время (эпохи, ISO дату и время и т.д.)
  2. сберегать истекает время
  3. по запросу каждого ресурса, проверить текущее время против после истечения времени и сделать запрос маркеров обновления до запроса ресурса, если access_token истек

в дополнении к получению нового access_token, вы можете получить новый refresh_token с временем истечения е далее в будущем. Если вы получите это, вы должны сохранить новый refresh_token, чтобы продлить срок службы.

Токен Refresh Handling: Метод 2

Другого метод обработки токенов обновления, чтобы обновить вручную после получения недопустимых маркеров ошибки. Это можно сделать с помощью предыдущего подхода или самого себя.

Если вы попытаетесь использовать истек срок действия access_token и получите недопустимую токенную ошибку, вам необходимо выполнить обновление токена (если токен обновления остается в силе). Поскольку разные службы могут использовать разные коды ошибок для истекших токенов, вы можете либо отслеживать код для каждой службы, либо простой способ обновлять токены между службами - просто попробовать одно обновление при столкновении с ошибкой 4xx.

Недопустимый маркер доступа Ошибки

Ниже приведены некоторые коды ошибок из популярных сервисов:

  1. Facebook: Error 467 Invalid access token - маркер доступа истек, был отменен, или иным образом недействительны - Ручка с истекшим сроком действия токенов.
  2. LinkedIn: Error 401 Unauthorized.
  3. PayPal: Error 401 Unauthorized.

Обновить Токен Истечение

Если refresh_token также истек, вам нужно будет снова пройти процесс авторизации.

+0

Привет, большое спасибо за ваш ответ! Проверяя время истечения срока действия, что, если пользователь меняет время устройства? Не приведет ли это к слишком частому обновлению токена доступа? А что касается проверки неверной ошибки токена, есть ли у вас какие-либо идеи относительно кода ответа и формата ошибки, возвращаемого сервером oAuth? И будет ли это ответ об ошибке одинаковым для всех серверов oAuth? – XiOS

+0

Каковы некоторые случаи использования часто возникающих изменений времени устройства? Изменения в часовых поясах следует обрабатывать автоматически. Так как неверный код ошибки токена не определен в стандарте, разные службы выбрали различные коды ошибок, перечисленные выше. Простой подход к обновлению может состоять в том, чтобы попробовать одно обновление при ошибке 4xx, как упоминалось выше. – Grokify

Смежные вопросы