HTTP-статус 401, но ожидаемые данные в HTTP-ответе

Я получаю код состояния 401 на ответ от веб-сервера. Однако, если я перехватываю исключение 401 и обрабатываю данные, ответ фактически содержит ту же информацию, что и авторизованный запрос - у меня есть другой клиент, получивший статус 200 с данными для подтверждения этого. Fiddler также подтверждает данные.

Я считаю, что это некорректное поведение сервера; Однако я не могу найти спецификацию для подтверждения как таковую. Я прочитал RFC 2616 и 2617, и наиболее актуальный фрагмент выглядит так:

Если ответ 401 содержит ту же проблему, что и предыдущий ответ, и пользовательский агент уже предпринял попытку аутентификации, по крайней мере, один раз, тогда пользователю СЛЕДУЕТ представить объект, который был указан в ответе, поскольку этот объект может включать в себя соответствующую диагностическую информацию.

Однако, согласно общему определению объекта, субъект теоретически может быть данными, которые будут отправлены в авторизованный запрос.

Мне было бы удобнее с 401 и без данных / данных отказа в авторизации, или 200 с авторизованными данными. Но я боюсь, что это может быть дефектом и вызывать у меня проблемы в будущем. Я не могу сказать, правильно ли я работаю с 401 или нет.

Есть ли какая-либо спецификация, в которой говорится, что авторизованные данные не должны возвращаться клиентскому запросу, который генерирует ответ 401? Или этот сценарий действителен?

1 ответ

Я не думаю the entity could theoretically be the data that would be sent to an authorized request.

Из RFC 2616:

Если ответ 401 содержит ту же проблему, что и предыдущий ответ, и пользовательский агент уже предпринял попытку аутентификации, по крайней мере, один раз, тогда пользователю СЛЕДУЕТ представить объект, который был указан в ответе, поскольку этот объект может включать в себя соответствующую диагностическую информацию.

Таким образом, законно представить объект не прошедшему проверку подлинности пользователю.

Как вы сказали, authorized data should not be returned to a client... но в вашем случае сущности одинаковы для аутентифицированных и неаутентифицированных пользователей.

С другой стороны, страница входа в Google использует 200 в качестве кода ответа для сбоя аутентификации.

Обратите внимание, что:

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

Причиной может быть то, что большинство браузеров откроет всплывающее окно для использования, чтобы заполнить имя пользователя и пароль, когда они получат поле заголовка WWW-Authenticate. Но это основано на простом тексте, который может вызвать проблемы с безопасностью.

Другие вопросы по тегам