Autenticación básica HTTP: ¿cuál es la experiencia esperada del navegador web?

255

Cuando un servidor permite el acceso a través de la autenticación básica HTTP, ¿cuál es la experiencia esperada en un navegador web ?

Ignorando el navegador web por un momento, aquí se explica cómo crear una solicitud de autenticación básica con curl:

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

Pero, ¿qué pasa con un navegador web? Lo que he visto en algunos sitios web es que visito la URL y luego el servidor devuelve el código de respuesta 401. El navegador muestra un mensaje de nombre de usuario / contraseña.

Sin embargo, en somesite.com, no recibo ninguna solicitud de autorización, solo una página que dice que no estoy autorizado. ¿Somesite no implementó el flujo de trabajo de autenticación básica correctamente o hay algo más que deba hacer?

bpapa
fuente
¿Estás seguro de que usas autenticación básica y no resumen?
b_erb
No estoy seguro de la diferencia, a menos que me pregunte si codifico en base 64. si lo estuviera haciendo programáticamente lo haría, pero curl lo hace por mí.
bpapa
Puede averiguar qué autenticación se utiliza desde el encabezado de respuesta WWW-Authenticate (valor: Digest o Basic).
Kniganapolke
2
Creo que esta pregunta necesita ser reformulada. Más de un encuestado piensa que se trata de curl en lugar del navegador.
LS
¿Te refieres a "autenticación" cuando usas el término "autorización"?
Tarun

Respuestas:

160

Para ayudar a todos a evitar confusiones, reformularé la pregunta en dos partes.

Primero: "¿cómo puede hacer una solicitud HTTP autenticada con un navegador, usando la autenticación BASIC?" .

En el navegador, primero puede hacer una autenticación básica http esperando que aparezca el mensaje o editando la URL si sigue este formato: http://myusername:[email protected]

NB: el comando curl mencionado en la pregunta está perfectamente bien, si tiene una línea de comando y curl instalados. ;)

Referencias

También de acuerdo con la página del manual 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.

La segunda y verdadera pregunta es "Sin embargo, en somesite.com, no recibo ninguna solicitud de autorización, solo una página que dice que no estoy autorizado. ¿Somesite no implementó correctamente el flujo de trabajo de autenticación básica o hay algo? ¿Qué más tengo que hacer? "

La documentación de curl dice que la -uopción admite muchos métodos de autenticación, Básico es el predeterminado.

Nicocube
fuente
3
La pregunta es sobre curl, que no es un navegador.
Ray Baxter
26
Es posible que no haya leído la pregunta por completo, ya que dice justo debajo del comando curl: "Sin embargo, en este momento no tengo acceso a curl (historia larga), y quiero hacerlo desde el navegador web, si es posible ". ;)
Nicocube
3
Estoy totalmente de acuerdo en que curl funciona bien, personalmente lo uso regularmente, pero la pregunta no es sobre curl ...
Nicocube
44
El autor de la pregunta quiere saber por qué la autenticación. no funciona en el navegador La pregunta no es sobre cURL.
LS
68

Has probado ?

curl somesite.com --user username:password
daronwolff
fuente
13
@daronwolff Solo cambiaste las posiciones de los argumentos y reemplazaste -u con --user (que es solo a largo plazo), pero aparte de eso escribiste exactamente lo que el OP ya escribió en su pregunta
Murmel
3
El autor de la pregunta quiere saber por qué la autenticación. no funciona en el navegador La pregunta no es sobre cURL.
LS
15

Es posible que tenga un nombre de usuario / contraseña inválido en su navegador. Intente borrarlos y verifique nuevamente.

Si está utilizando IE y somesite.com está en su zona de seguridad de Intranet, IE puede estar enviando sus credenciales de Windows automáticamente.

AUSteve
fuente
8

WWW-Autenticar encabezado

También puede obtener esto si el servidor está enviando un código de respuesta 401 pero no está configurando el encabezado WWW-Authenticate correctamente.

Chris McCauley
fuente
6

Si no hay credenciales proporcionadas en los encabezados de solicitud, la siguiente es la respuesta mínima requerida para que IE solicite credenciales al usuario y vuelva a enviar la solicitud.

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

Puedes usar Postman, un complemento para Chrome. Le da la posibilidad de elegir el tipo de autenticación que necesita para cada una de las solicitudes. En ese menú puede configurar usuario y contraseña. Postman traducirá automáticamente la configuración a un encabezado de autenticación que se enviará con su solicitud.

Mgccon
fuente