Вопрос

Я пишу небольшое приложение, которое предоставляет простой HTTP-API REST-ish. Я застрял, пытаясь решить, как сигнализировать об ошибке из-за отсутствия авторизации.

Приложение не имеет API для аутентификации, но вместо этого зависит от наличия файла cookie, содержащего токен сеанса, полученный клиентом через другую службу. Приложение проверяет сеанс и использует удостоверение, полученное в процессе проверки, для выполнения авторизации для конкретного приложения. Клиент не может пройти аутентификацию непосредственно в этом приложении.

Моя проблема в том, что очевидный код состояния HTTP для отклонения неавторизованных запросов, "401 Unauthorized", указан в терминах "WWW-Authenticate". заголовок. См. rfc2616 sec 10.4.2 .

  

Ответ ДОЛЖЕН включать   Поле заголовка WWW-Authenticate (раздел   14.47) содержащий запрос, применимый к запрашиваемому ресурсу.

Я не могу поверить, что это необычная проблема. Является ли обычным делом просто перегрузить 401, чтобы включить более общее использование? Как насчет браузеров, которые выдают диалоги auth / e (чего, кстати, я не видел в своем тестировании, так что, возможно, этого не происходит для POST)?

Итог: можно ли использовать 401 в этом контексте или есть лучшее решение?

Это было полезно?

Решение

Как правило, вы отправляете 401, если клиент может подтвердить подлинность и решить проблему, но поскольку вы не предоставляете способ проверки подлинности в API, я бы предложил вместо этого вернуть ошибку 403 (запрещено). Это не требует заголовка и будет указывать клиенту, что он не может получить доступ к услуге.

Другие советы

Верните что-то вроде этого:

HTTP/1.1 401 Unauthorized
Location: https://example.com/auth-app/login
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top