Токен закінчився - JSON REST API - Код помилки


84

У мене є JSON REST API. Існує рукостискання, яке дасть вам маркер, дійсний протягом 15 хвилин. Усі дзвінки, які ви робите протягом цих 15 хвилин, повинні працювати нормально. Через 15 хвилин я повертаю об'єкт помилки (включає код, повідомлення, успіх = false), але мені також цікаво, який код помилки HTTP я повинен повернути? І чи заплутає код помилки HTTP певних клієнтів? (HTML5, iPhone, Android). Що вважається найкращою практикою у цьому сценарії?


9
+1, чудове запитання. Ви коли-небудь знаходили хороше рішення для цього? (до речі - і netflix, і linkedin повертають 401).
Лассе Крістіансен,


@MichaelFreidgeim Це питання вже старіше
FindOutIslamNow

@FindOutIslamNow, "Можливий дублікат" - це спосіб очищення - закрити подібні запитання та зберегти одне з найкращими відповідями. Дата не є важливою. Див. Meta.stackexchange.com/questions/147643/… Якщо ви погоджуєтесь, що для цього потрібні роз’яснення, проголосуйте на meta.stackexchange.com/questions/281980/…
Майкл Фрейдгайм,

Відповіді:


89

Вам слід повернути 401 Unauthorizedкод стану. Ви можете додатково надати гіпермедіа, щоб знову встановити маркер

Подумайте, що відбувається у веб-програмі. Ви скажете, що це банківський сайт. Якщо не підтвердити, він перешле вас на сторінку входу. Потім ви входите в систему, і вам добре піти на деякий час. Потім він закінчується, і цикл повторюється.

Просто думка.


39

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

invalid_token Наданий маркер доступу закінчився, анульований, неправильно сформований або недійсний з інших причин. Ресурс ПОВИНЕН відповісти кодом стану HTTP 401 (неавторизований). Клієнт МОЖЕ запитати новий маркер доступу та повторити спробу запиту захищеного ресурсу.


2
Примітка СЛІД проти МОЖЕ . Як абоненту, було б приємно мати можливість покластися на 401. Ну добре.
dbreaux

12

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
  }
}

29
Щось підказує мені, що Facebook слід розглядати як виняток, а не як настанову щодо розвитку. Просто кажу.
Віктор Айвенс,

6
Це дзвінок до Facebook, як до сервера авторизації, або до постачальника ресурсів? Сервер авторизації повинен повернути 400: tools.ietf.org/html/rfc6749#section-5.2 , але постачальник ресурсів повинен повернути 401
Michael Freidgeim
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.