Базовая аутентификация HTTP - каков ожидаемый опыт веб-браузера?

255

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

На мгновение игнорируя веб-браузер, вот как создать запрос Basic Auth с помощью curl:

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

Но как насчет веб-браузера? На некоторых веб-сайтах я видел URL-адрес, а затем сервер возвращает код ответа 401. Затем браузер отображает запрос имени пользователя / пароля.

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

bpapa
источник
Вы уверены, что используете Basic Auth, а не Digest?
b_erb
не уверен в разнице, если только вы не спросите, кодирую ли я base-64. если бы я делал это программно, это было бы, но керл делает это для меня.
бапа
Вы можете узнать, какая аутентификация используется, из заголовка ответа WWW-Authenticate (значение: Digest или Basic).
Книганапольке
2
Я думаю, что этот вопрос необходимо перефразировать. Более одного респондента считают, что это вопрос кудряшки, а не браузера.
LS
Вы подразумеваете «аутентификация», когда используете термин «авторизация»?
Тарун

Ответы:

160

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

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

В браузере вы можете сначала выполнить базовую аутентификацию http, дождавшись появления приглашения или отредактировав URL, если вы придерживаетесь этого формата: http://myusername:mypassword@somesite.com

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:passwd@machine.domain/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 я вообще не получаю приглашение на авторизацию, просто на странице, на которой написано, что я не авторизован. что еще мне нужно сделать?

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

Nicocube
источник
3
Вопрос о curl, который не является браузером.
Рэй Бакстер
26
Вы, возможно, не прочитали вопрос полностью, так как он говорит только под командой curl: «Однако сейчас у меня нет доступа к curl (длинная история), и я хочу просто сделать это из веб-браузера, если это возможно «. ;)
Nicocube
3
Я полностью согласен с тем, что curl работает нормально, я лично использую его регулярно, но вопрос не о curl ...
Nicocube
4
Аскер хочет знать, почему аутентификация. не работает в браузере. Вопрос не о cURL.
LS
68

Ты пробовала ?

curl somesite.com --user username:password
daronwolff
источник
13
@daronwolff Вы только поменяли позиции аргументов и заменили -u на --user (который является только долгосрочным), но помимо этого вы написали именно то, что ОП уже написал в своем вопросе
Murmel
3
Аскер хочет знать, почему аутентификация. не работает в браузере. Вопрос не о cURL.
LS
15

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

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

AUSteve
источник
8

WWW-Authenticate header

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

Крис МакКоли
источник
6

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

Response.Clear();
Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
Response.AddHeader("WWW-Authenticate", "Basic");
Крис Хинч
источник
5

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

Mgccon
источник