Autenticação básica HTTP - qual é a experiência esperada do navegador da web?

255

Quando um servidor permite o acesso via autenticação HTTP básica, qual é a experiência esperada em um navegador da web ?

Ignorando o navegador da web por um momento, veja como criar uma solicitação de autenticação básica com curl:

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

Mas e em um navegador da Web? O que vi em alguns sites é visitar o URL e, em seguida, o servidor retorna o código de resposta 401. O navegador exibe um prompt de nome de usuário / senha.

No entanto, em somesite.com, não estou recebendo nenhum aviso de autorização, apenas uma página que diz que não estou autorizado. Algum site não implementou o fluxo de trabalho de autenticação básica corretamente ou há outra coisa que preciso fazer?

bpapa
fonte
Tem certeza de que usa o Basic Auth e não o Digest?
b_erb
não tenho certeza da diferença, a menos que você esteja perguntando se eu codifico a base-64. se eu estivesse fazendo isso programaticamente, faria, mas o curl faz isso por mim.
bpapa
Você pode descobrir qual autenticação é usada no cabeçalho de resposta WWW-Authenticate (valor: Digest ou Basic).
precisa saber é o seguinte
2
Eu acho que essa pergunta precisa ser reformulada. Mais de um entrevistado acha que é uma pergunta sobre ondulação, e não sobre o navegador.
LS
Você quer dizer "autenticação" quando usa o termo "autorização"?
Tarun

Respostas:

160

Para ajudar todos a evitar confusões, vou reformular a questão em duas partes.

Primeiro: "como fazer uma solicitação HTTP autenticada com um navegador usando a autenticação BASIC?".

No navegador, você pode fazer uma autenticação básica http primeiro, aguardando o prompt chegar ou editando o URL se você seguir este formato: http://myusername:[email protected]

Nota: o comando curl mencionado na pergunta é perfeitamente adequado, se você tiver uma linha de comando e um curl instalados. ;)

Referências:

Também de acordo com a página do 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.

A segunda e verdadeira pergunta é "No entanto, no somesite.com, não estou recebendo nenhum aviso de autorização, apenas uma página que diz que não estou autorizado. Algum site não implementou o fluxo de trabalho de autenticação básica corretamente ou há algo mais eu preciso fazer? "

A documentação do curl diz que a -uopção suporta muitos métodos de autenticação, sendo o básico o padrão.

Nicocube
fonte
3
A questão é sobre curl, que não é um navegador.
Raio Baxter
26
Você pode não ter lido a pergunta completamente, como diz logo abaixo do comando curl: "No entanto, no momento não tenho acesso a curl (história longa) e quero fazê-lo no navegador da Web, se possível . " ;)
Nicocube 23/11
3
Concordo plenamente que onda funciona bem, eu personnally usá-lo em uma base regular, mas a questão não é sobre a onda ...
Nicocube
4
O solicitante quer saber por que o auth. não está funcionando no navegador. A pergunta não é sobre cURL.
LS
68

Você tentou ?

curl somesite.com --user username:password
daronwolff
fonte
13
@daronwolff Você só trocou as posições argumentos e substituído -u com --user (que é apenas a longo prazo), mas para além de que você escreveu exatamente o que o OP já escreveu na sua pergunta
Murmel
3
O solicitante quer saber por que o auth. não está funcionando no navegador. A pergunta não é sobre cURL.
LS
15

Você pode ter um nome de usuário / senha inválido antigo em cache no seu navegador. Tente limpá-los e verifique novamente.

Se você estiver usando o IE e o somesite.com estiver na sua zona de segurança da Intranet, o IE poderá enviar suas credenciais do Windows automaticamente.

AUSteve
fonte
8

WWW-Authenticate header

Você também pode obtê-lo se o servidor estiver enviando um código de resposta 401, mas não configurando o cabeçalho WWW-Authenticate corretamente - eu deveria saber, acabei de corrigir isso no próprio código porque os aplicativos VB não estavam aparecendo o prompt de autenticação.

Chris McCauley
fonte
6

Se não houver credenciais fornecidas nos cabeçalhos da solicitação, a seguir é a resposta mínima necessária para o IE solicitar ao usuário credenciais e reenviar a solicitação.

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

Você pode usar o Postman, um plugin para o chrome. Permite escolher o tipo de autenticação necessário para cada uma das solicitações. Nesse menu, você pode configurar usuário e senha. O Postman converterá automaticamente a configuração em um cabeçalho de autenticação que será enviado com sua solicitação.

Mgccon
fonte