HTTP Basic Authentication - Wie wird das erwartete Webbrowser-Erlebnis?

255

Welche Erfahrung wird in einem Webbrowser erwartet, wenn ein Server den Zugriff über die grundlegende HTTP-Authentifizierung zulässt ?

Wenn Sie den Webbrowser für einen Moment ignorieren, können Sie wie folgt eine grundlegende Authentifizierungsanforderung erstellen mit curl:

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

Aber was ist mit einem Webbrowser? Was ich auf einigen Websites gesehen habe, ist, dass ich die URL besuche und der Server dann den Antwortcode 401 zurückgibt. Der Browser zeigt dann eine Eingabeaufforderung für Benutzername / Passwort an.

Auf somesite.com erhalte ich jedoch überhaupt keine Autorisierungsaufforderung, sondern nur eine Seite, auf der steht, dass ich nicht autorisiert bin. Hat jemand den Basic Auth-Workflow nicht korrekt implementiert, oder muss ich noch etwas tun?

bpapa
quelle
Sind Sie sicher, dass Sie Basic Auth und nicht Digest verwenden?
b_erb
Ich bin mir des Unterschieds nicht sicher, es sei denn, Sie fragen, ob ich Base-64 codiere. Wenn ich das programmatisch machen würde, würde es das tun, aber Curl macht das für mich.
Papa
Welche Authentifizierung verwendet wird, erfahren Sie im WWW-Authenticate-Antwortheader (Wert: Digest oder Basic).
Kniganapolke
2
Ich denke, diese Frage muss umformuliert werden. Mehr als ein Befragter glaubt, dass es sich eher um Curl als um den Browser handelt.
LS
Meinen Sie "Authentifizierung", wenn Sie den Begriff "Autorisierung" verwenden?
Tarun

Antworten:

160

Um Verwirrung zu vermeiden, werde ich die Frage in zwei Teile umformulieren.

Erstens: "Wie kann eine authentifizierte HTTP-Anfrage mit einem Browser unter Verwendung der BASIC-Authentifizierung gestellt werden?" .

Im Browser können Sie zuerst eine http-Basisauthentifizierung durchführen, indem Sie auf die Eingabeaufforderung warten oder die URL bearbeiten, wenn Sie diesem Format folgen: http://myusername:[email protected]

NB: Der in der Frage erwähnte Befehl curl ist vollkommen in Ordnung, wenn Sie eine Befehlszeile und einen Curl installiert haben. ;)

Verweise:

Auch laut CURL-Handbuchseite 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.

Die zweite und eigentliche Frage lautet: "Auf somesite.com erhalte ich jedoch überhaupt keine Autorisierungsaufforderung, sondern nur eine Seite, auf der steht, dass ich nicht autorisiert bin. Hat jemand den Basic Auth-Workflow nicht korrekt implementiert oder gibt es etwas?" sonst muss ich tun? "

In der Curl-Dokumentation heißt es, dass die -uOption viele Authentifizierungsmethoden unterstützt, wobei Basic die Standardeinstellung ist.

Nicocube
quelle
3
Die Frage ist über Curl, das kein Browser ist.
Ray Baxter
26
Möglicherweise haben Sie die Frage nicht vollständig gelesen, da sie direkt unter dem Befehl curl steht: "Im Moment habe ich jedoch keinen Zugriff auf curl (lange Geschichte), und ich möchte dies nach Möglichkeit nur über den Webbrowser tun . " ;)
Nicocube
3
Ich stimme voll und ganz zu, dass Curl gut funktioniert, ich persönlich benutze es regelmäßig, aber die Frage ist nicht über Curl ...
Nicocube
4
Der Fragesteller möchte wissen, warum auth. funktioniert nicht im Browser. Die Frage ist nicht über cURL.
LS
68

Hast du es versucht ?

curl somesite.com --user username:password
daronwolff
quelle
13
@daronwolff Du hast nur die Argumentpositionen gewechselt und -u durch --user ersetzt (was nur langfristig ist), aber ansonsten hast du genau das geschrieben, was das OP bereits in seiner Frage geschrieben hat
Murmel
3
Der Fragesteller möchte wissen, warum auth. funktioniert nicht im Browser. Die Frage ist nicht über cURL.
LS
15

Möglicherweise haben Sie einen alten ungültigen Benutzernamen / ein ungültiges Passwort in Ihrem Browser zwischengespeichert. Versuchen Sie, sie zu löschen, und überprüfen Sie sie erneut.

Wenn Sie den Internet Explorer verwenden und sich somesite.com in Ihrer Intranetsicherheitszone befindet, sendet der Internet Explorer Ihre Windows-Anmeldeinformationen möglicherweise automatisch.

AUSteve
quelle
8

WWW-Authentifizierungsheader

Sie können dies auch erhalten, wenn der Server einen 401-Antwortcode sendet, aber den WWW-Authenticate-Header nicht richtig einstellt. Ich sollte wissen, dass ich dies nur in unserem eigenen Code behoben habe, da VB-Apps die Authentifizierungsaufforderung nicht angezeigt haben.

Chris McCauley
quelle
6

Wenn in den Anforderungsheadern keine Anmeldeinformationen angegeben sind, ist die folgende Mindestantwort erforderlich, damit der IE den Benutzer zur Eingabe von Anmeldeinformationen auffordert und die Anforderung erneut sendet.

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

Sie können Postman ein Plugin für Chrome verwenden. Sie können den Authentifizierungstyp auswählen, den Sie für jede der Anforderungen benötigen. In diesem Menü können Sie Benutzer und Passwort konfigurieren. Postman übersetzt die Konfiguration automatisch in einen Authentifizierungsheader, der mit Ihrer Anfrage gesendet wird.

Mgccon
quelle