HTTP Basic Authentication - что ожидаемый браузер?

Когда сервер разрешает доступ через базовую HTTP-аутентификацию, каков опыт, ожидаемый в браузере?

Я обычно делаю это с помощью curl:

curl -u myusername:mypassword http://somesite.com

И все работает отлично. Однако сейчас у меня нет доступа к завиту (длинная история), и я хочу просто сделать это из веб-браузера, если это возможно.

Я думал, что Basic Auth должен был работать - я печатаю URL-адрес, который я хочу, затем сервер решает, что я не авторизовался, возвращает код ответа 401, и я ввожу свое имя пользователя и пароль в приглашение. Если это правильно, страница загружается!

Однако, на somesite.com, я не получаю приглашение авторизации вообще, просто страница, в которой говорится, что я не авторизовался. Неужели somesite не выполнил рабочий процесс Basic Auth правильно, или есть что-то еще, что мне нужно сделать?

Ответ 1

Чтобы помочь всем избежать путаницы, я переформулирую вопрос в двух частях.

Во-первых: "как можно сделать аутентифицированный HTTP-запрос с помощью браузера, используя BASIC-аутентификацию?" ,

В браузере вы можете сначала выполнить базовую http-аутентификацию, дождавшись приглашения или отредактировав URL, если вы используете следующий формат: http://myusername:[email protected]

NB: команда curl, упомянутая в вопросе, прекрасно работает, если у вас установлена командная строка и curl. ;)

Рекомендации:

Также согласно странице руководства CURL https://curl.haxx.se/docs/manual.html

HTTP

  Curl also supports user and password in HTTP URLs, thus you can pick a file
  like:

      curl http://name:[email protected]/full/path/to/file

  or specify user and password separately like in

      curl -u name:passwd http://machine.domain/full/path/to/file

  HTTP offers many different methods of authentication and curl supports
  several: Basic, Digest, NTLM and Negotiate (SPNEGO). Without telling which
  method to use, curl defaults to Basic. You can also ask curl to pick the
  most secure ones out of the ones that the server accepts for the given URL,
  by using --anyauth.

  NOTE! According to the URL specification, HTTP URLs can not contain a user
  and password, so that style will not work when using curl via a proxy, even
  though curl allows it at other times. When using a proxy, you _must_ use
  the -u style for user and password.

Второй и реальный вопрос: "Однако на somesite.com я вообще не получаю приглашение на авторизацию, просто на странице, на которой написано, что я не авторизован. Неужели на каком-то сайте неправильно реализован рабочий процесс Basic Auth, или что-то есть? что еще мне нужно сделать?

В документации curl говорится, что опция -u поддерживает множество методов аутентификации, по умолчанию используется Basic.

Ответ 2

Вы пробовали?

curl somesite.com --user username:password

Ответ 3

У вас может быть старое недопустимое имя пользователя/пароль, кэшированное в вашем браузере. Попробуйте очистить их и снова проверить.

Если вы используете IE, а somesite.com находится в зоне безопасности Intranet, IE может автоматически отправлять ваши учетные данные Windows.

Ответ 4

Заголовок WWW-Authenticate

Вы также можете получить это, если сервер отправляет код ответа 401, но не правильно устанавливает заголовок WWW-Authenticate - я должен знать, я только что исправил это из собственного кода, потому что приложения VB не выходили из аутентификация.

Ответ 5

Если в заголовках запроса нет учетных данных, то минимальный ответ, требуемый для IE, должен запрашивать у пользователя учетные данные и повторно отправлять запрос.

Response.Clear();
Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
Response.AddHeader("WWW-Authenticate", "Basic");

Ответ 6

Вы можете использовать Postman плагин для хром. Это дает возможность выбрать тип аутентификации, который вам нужен для каждого из запросов. В этом меню вы можете настроить пользователя и пароль. Postman автоматически преобразует конфигурацию в заголовок аутентификации, который будет отправлен с вашим запросом.