Имеем некое RESTful API.
Клиент проходит аутентификацию и получает токен.
Далее для доступа к определённым страницам клиент должен предоставить этот токен.
Какой HTTP статус должен вернуть сервер если токен не передан?
— 400 Bad Request (так как токен является обязательным параметром)
— 401 Unauthorized
— 403 Forbidden
А если передан неверный токен?
UPD
… или истекла сессия для переданного токена?
UPD 2
Согласно "
Диаграмме принятия веб-сервером решений на основе заголовков" из википедии, происходит следующее:
Можно ли расценивать отсутствие параметра как «Bad Request»?
The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.
RFC 2616 пункт 10.4.1
Если да, то при отсутствии токена код 400 является наиболее верным, т.к. его обработка происходит раньше проверки авторизации.
Далее сервер проверяет авторизован ли клиент.
Если токен неверен или отсутствует (допустим мы решили код 400 не использовать), то сервер отдаёт код 401 — просит пройти авторизацию.
Наконец, сервер узнал пользователя. Есть доступ — работаем дальше, нет доступа — 403 статус.
Кроме того в RFC 2616 сказано о статусе 403:
The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated.
Другими словами:
400 или 401 если токен не передан
401 если токен неверен / истекла сессия
403 токен передан и клиент узнан, но не имеет доступа к контенту
Прав ли я?