Подтвердить что ты не робот

Token Expired - API JSON REST - код ошибки

У меня есть API JSON REST. Существует рукопожатие, которое даст вам токен, который действителен в течение 15 минут. Все вызовы, которые вы выполняете в течение этих 15 минут, должны работать нормально. Через 15 минут я возвращаю объект ошибки (включая код, сообщение, success = false), но мне также интересно, какой код ошибки HTTP я должен вернуть? И будет ли использование кода ошибки HTTP испортить определенные клиенты? (HTML5, iPhone, Android). Что считается лучшей практикой в ​​этом сценарии?

4b9b3361

Ответ 1

Вы должны вернуть код состояния 401 Unauthorized. Вы можете дополнительно предоставить гипермедиа, чтобы снова установить токен.

Подумайте, что происходит в веб-приложении. Вы отправляетесь на банковский сайт. Если не auth'd, он отправит вас на страницу входа в систему. Затем вы входите в систему, и вам хорошо пойти на какое-то время. Затем он истекает и цикл повторяется.

Просто мысль.

Ответ 2

в соответствии со спецификацией rfc6750 - "Рамка авторизации OAuth 2.0: использование токена носителя", https://tools.ietf.org/html/rfc6750, стр .8, раздел 3.1, сервер ресурсов должен вернуть 401: >

invalid_token         Предоставляемый токен доступа истек, отозван, искажен или         недействительным по другим причинам. Ресурс СЛЕДУЕТ ответить         код статуса HTTP 401 (неавторизованный). Клиент МОЖЕТ         запросить новый токен доступа и повторить попытку использования защищенного ресурса         запрос.

Ответ 3

FWIW Facebook использует 400 с пользовательским ответом JSON. Я лично предпочел бы 401 с пользовательским ответом JSON.

Вот тело ответа FB:

{
  "error": {
    "message": "Error validating access token: Session has expired on Jul 17, 2014 9:00am. The current time is Jul 17, 2014 9:07am.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 463
  }
}

Ответ 4

Я искал спецификацию OAuth 2, и все, что я мог найти, это то, что они возвращают "Недопустимую ошибку токена", когда она истекает. Нет никакого упоминания, что я могу найти, какого HTTP-кода они используют. Тем не менее, я бы сказал, что ваша самая безопасная ставка - это просто использовать 400.