Autenticazione di base HTTP: qual è l'esperienza del browser Web prevista?


255

Quando un server consente l'accesso tramite l'autenticazione HTTP di base, qual è l'esperienza prevista in un browser Web ?

Ignorando il browser Web per un momento, ecco come creare una richiesta di autenticazione di base con curl:

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

Ma che dire di un browser Web? Quello che ho visto su alcuni siti Web è che visito l'URL e quindi il server restituisce il codice di risposta 401. Il browser visualizza quindi una richiesta nome utente / password.

Tuttavia, su somesite.com, non ricevo alcuna richiesta di autorizzazione, ma solo una pagina che dice che non sono autorizzato. Somesite non ha implementato correttamente il flusso di lavoro di Auth di base o c'è qualcos'altro che devo fare?


Sei sicuro di usare l'autent di base e non il digest?
b_erb,

non sono sicuro della differenza, a meno che tu non mi chieda se codifico in base 64. se lo facessi programmaticamente lo farebbe, ma curl lo fa per me.
bpapa,

Puoi scoprire quale autenticazione viene utilizzata dall'intestazione della risposta WWW-Authenticate (valore: Digest o Basic).
Kniganapolke,

2
Penso che questa domanda debba essere riformulata. Più di un intervistato pensa che sia una domanda sull'arricciatura piuttosto che sul browser.
LS

Intendi "autenticazione" quando usi il termine "autorizzazione"?
Tarun,

Risposte:


160

Per aiutare tutti a evitare confusione, riformulerò la domanda in due parti.

Primo: "come si può fare una richiesta HTTP autenticata con un browser, usando l'autenticazione BASIC?" .

Nel browser è possibile eseguire prima un'autorizzazione di base http aspettando che arrivi il prompt o modificando l'URL se si segue questo formato: http://myusername:mypassword@somesite.com

NB: il comando curl menzionato nella domanda va benissimo, se hai una riga di comando e un ricciolo installati. ;)

Riferimenti:

Sempre secondo la pagina del manuale 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.

La seconda e vera domanda è "Tuttavia, su somesite.com, non ricevo affatto una richiesta di autorizzazione, solo una pagina che dice che non sono autorizzato. Somesite non ha implementato correttamente il flusso di lavoro di Basic Auth o c'è qualcosa altro che devo fare? "

La documentazione di arricciatura afferma che l' -uopzione supporta molti metodi di autenticazione, di base è l'impostazione predefinita.


3
La domanda riguarda l'arricciatura, che non è un browser.
Ray Baxter,

26
Potresti non aver letto interamente la domanda, come dice appena sotto il comando curl: "Tuttavia, in questo momento non ho accesso al ricciolo (lunga storia) e, se possibile, voglio farlo solo dal browser web ". ;)
Nicocube,

3
Concordo pienamente sul fatto che il ricciolo funzioni bene, lo uso personalmente su base regolare, ma la domanda non riguarda il ricciolo ...
Nicocube,

4
Il richiedente vuole sapere perché auth. non funziona nel browser. La domanda non riguarda cURL.
LS

68

Hai provato ?

curl somesite.com --user username:password

13
@daronwolff Hai cambiato solo le posizioni degli argomenti e sostituito -u con --user (che è solo il lungo termine), ma a parte questo hai scritto esattamente ciò che l'OP ha già scritto nella sua domanda
Murmel

3
Il richiedente vuole sapere perché auth. non funziona nel browser. La domanda non riguarda cURL.
LS

15

Potresti avere un vecchio nome utente / password non validi nella tua cache. Prova a cancellarli e ricontrolla.

Se stai utilizzando IE e somesite.com si trova nella tua zona di sicurezza Intranet, IE potrebbe inviare automaticamente le tue credenziali di Windows.


8

Intestazione WWW-Authenticate

Potresti anche ottenere questo se il server sta inviando un codice di risposta 401 ma non imposta correttamente l'intestazione WWW-Authenticate - dovrei sapere, l'ho appena risolto in proprio codice perché le app VB non stavano spuntando il prompt di autenticazione.


6

Se non ci sono credenziali fornite nelle intestazioni della richiesta, di seguito è la risposta minima richiesta per IE per richiedere all'utente le credenziali e inviare nuovamente la richiesta.

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

5

Puoi usare Postman un plugin per Chrome. Offre la possibilità di scegliere il tipo di autenticazione necessario per ciascuna delle richieste. In quel menu puoi configurare utente e password. Postman tradurrà automaticamente la configurazione in un'intestazione di autenticazione che verrà inviata con la tua richiesta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.