Как клиент HTTP окончательно определяет, был ли успешным вход в систему при использовании базовой проверки подлинности? Я всегда думал, что это было просто - посмотреть на код ответа:Определите, был ли вход в систему с базовой аутентификацией завершен
- 200 = Успешное
- 401 = Неудачная
Это не правильно. Если вы читали RFC 2617 говорится:
Если исходный сервер не желает принимать верительные посланный с запросом, он должен вернуть (Несанкционированный) ответ 401. Ответ ДОЛЖЕН включать поле заголовка WWW-Authenticate, содержащее по адресу наименее одно (возможно новое) требование, применимое к запрашиваемому ресурсу .
Слово ДОЛЖНА сложно, а на самом деле я видел устройства, которые не возвращают 401 на провал входа в систему. Это предполагает:
- WWW-Authenticate не существует = Успешное
- WWW-Authenticate существует = Неудачная
Это тоже неверно. Я играю с TP-LINK маршрутизатор, который обеспечивает следующие заголовки:
- Server : Router Webserver
- Connection : close
- Content-Type : text/html
- WWW-Authenticate : Basic realm="TP-LINK Wireless N Router WR841N"
Код ответа 200.
Здесь мы имеем 200 с WWW-Authenticate !!!!!
Учитывая все это, какой ОПРЕДЕЛЕННЫЙ способ определить, был ли вход в систему BA успешным?
Ответный код является самым надежным способом. Если сервер отправляет неверный код ответа, сервер не играет хорошо. Вы ничего не можете с этим поделать. –
Хорошо, поэтому сервер мог ответить любым способом, который он хотел, даже если он против спецификации. Но, учитывая эту спецификацию, каков «правильный» способ определить, что логин был успешным? –
Как я уже сказал, код ответа является «правильным» способом. Тем не менее, спецификация также говорит: «* HTTP не ограничивает приложения этой простой инфраструктурой защиты запросов и ответов для аутентификации доступа. Могут использоваться дополнительные механизмы, такие как аутентификация на уровне транспорта или инкапсуляция сообщений, а также дополнительные поля заголовка, определяющие аутентификацию Однако такие дополнительные механизмы не определены этой спецификацией. * ", поэтому * SHOULD * используется вместо * MUST *, я думаю. –