Podstawowe uwierzytelnianie HTTP - jakie jest oczekiwane działanie przeglądarki internetowej?

255

Kiedy serwer zezwala na dostęp za pośrednictwem podstawowego uwierzytelniania HTTP, czego oczekuje się w przeglądarce internetowej ?

Ignorując przez chwilę przeglądarkę internetową, oto jak utworzyć żądanie autoryzacji podstawowej za pomocą curl:

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

A co z przeglądarką internetową? Widziałem na niektórych stronach internetowych, że odwiedzam adres URL, a następnie serwer zwraca kod odpowiedzi 401. Przeglądarka wyświetla następnie monit o podanie nazwy użytkownika / hasła.

Jednak w witrynie somesite.com w ogóle nie pojawia się monit o autoryzację, tylko strona z informacją, że nie mam autoryzacji. Czy ktoś nie poprawnie zaimplementował przepływ pracy Podstawowego uwierzytelniania lub jest coś innego, co muszę zrobić?

bpapa
źródło
Czy na pewno używasz Podstawowego uwierzytelniania, a nie Digest?
b_erb
nie jestem pewien różnicy, chyba że pytasz, czy koduję kodem base-64. gdybym robił to programowo, zrobiłby to, ale curl robi to za mnie.
bpapa,
Możesz dowiedzieć się, jakie uwierzytelnianie jest używane z nagłówka odpowiedzi uwierzytelniania WWW (wartość: Podsumowanie lub Podstawowe).
Kniganapolke,
2
Myślę, że to pytanie należy przeformułować. Więcej niż jeden respondent uważa, że ​​chodzi o zwijanie się, a nie o przeglądarkę.
LS
Czy masz na myśli „uwierzytelnianie”, kiedy używasz terminu „autoryzacja”?
Tarun

Odpowiedzi:

160

Aby pomóc wszystkim uniknąć nieporozumień, przeformułuję pytanie w dwóch częściach.

Po pierwsze: „jak wykonać uwierzytelnione żądanie HTTP za pomocą przeglądarki przy użyciu uwierzytelniania BASIC?” .

W przeglądarce możesz najpierw wykonać uwierzytelnianie podstawowe HTTP, czekając na monit, lub edytując adres URL, jeśli zastosujesz ten format: http://myusername:[email protected]

Uwaga: polecenie curl wspomniane w pytaniu jest całkowicie w porządku, jeśli masz zainstalowany wiersz poleceń i curl. ;)

Bibliografia:

Również zgodnie ze stroną podręcznika 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.

Drugie i prawdziwe pytanie brzmi: „Jednak na stronie somesite.com w ogóle nie pojawia się monit o autoryzację, tylko strona z informacją, że nie mam autoryzacji. Czy ktoś nie zaimplementował poprawnie przepływu pracy Basic Auth, czy jest coś jeszcze muszę to zrobić? ”

Dokumentacja curl mówi, że -uopcja obsługuje wiele metod uwierzytelniania, przy czym Basic jest domyślny.

Nicocube
źródło
3
Pytanie dotyczy curl, który nie jest przeglądarką.
Ray Baxter,
26
Być może nie przeczytałeś pytania w całości, ponieważ jest napisane tuż pod poleceniem curl: „Jednak w tej chwili nie mam dostępu do curl (długa historia) i chcę to zrobić z przeglądarki internetowej, jeśli to możliwe . ” ;)
Nicocube,
3
Całkowicie się zgadzam, że curl działa dobrze, osobiście używam go regularnie, ale pytanie nie dotyczy curl ...
Nicocube
4
Pytający chce wiedzieć, dlaczego uwierzytelnianie. nie działa w przeglądarce. Pytanie nie dotyczy cURL.
LS
68

Czy próbowałeś ?

curl somesite.com --user username:password
daronwolff
źródło
13
@daronwolff Zmieniłeś tylko pozycje argumentów i zastąpiłeś -u opcją --user (co jest tylko długoterminowe), ale oprócz tego napisałeś dokładnie to, co OP napisał już w swoim pytaniu
Murmel
3
Pytający chce wiedzieć, dlaczego uwierzytelnianie. nie działa w przeglądarce. Pytanie nie dotyczy cURL.
LS
15

Być może Twoja stara nazwa użytkownika / hasło są buforowane w przeglądarce. Spróbuj je wyczyścić i sprawdź ponownie.

Jeśli korzystasz z IE, a somesite.com znajduje się w strefie bezpieczeństwa intranetu, IE może automatycznie wysyłać poświadczenia systemu Windows.

AUSteve
źródło
8

Nagłówek uwierzytelniania WWW

Możesz to również uzyskać, jeśli serwer wysyła kod odpowiedzi 401, ale nie ustawia poprawnie nagłówka uwierzytelniania WWW - powinienem wiedzieć, właśnie to naprawiłem w swoim własnym kodzie, ponieważ aplikacje VB nie wyświetlały monitu o uwierzytelnienie.

Chris McCauley
źródło
6

Jeśli w nagłówkach żądania nie podano poświadczeń, poniżej podano minimalną odpowiedź wymaganą dla IE, aby poprosić użytkownika o poświadczenia i ponownie przesłać żądanie.

Response.Clear();
Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
Response.AddHeader("WWW-Authenticate", "Basic");
Chris Hinch
źródło
5

Możesz użyć Postmana we wtyczce do chrome. Daje to możliwość wyboru rodzaju uwierzytelnienia potrzebnego dla każdego żądania. W tym menu możesz skonfigurować użytkownika i hasło. Listonosz automatycznie przetłumaczy konfigurację na nagłówek uwierzytelnienia, który zostanie wysłany z Twoim żądaniem.

Mgccon
źródło