Срок действия маркера истек - JSON REST API - код ошибки - PullRequest
60 голосов
/ 13 января 2012

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

Ответы [ 4 ]

69 голосов
/ 14 января 2012

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

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

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

26 голосов
/ 16 сентября 2016

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

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

9 голосов
/ 17 июля 2014

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
  }
}
2 голосов
/ 14 января 2012

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

...