HTTP Basic Authentication - apa pengalaman yang diharapkan dari browser web?

255

Ketika server mengizinkan akses melalui Otentikasi HTTP Dasar, apa pengalaman yang diharapkan di browser web ?

Mengabaikan peramban web sejenak, berikut ini cara membuat permintaan Auth Dasar dengan curl:

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

Tapi bagaimana dengan Browser Web? Apa yang saya lihat di beberapa situs web, adalah saya mengunjungi URL, dan kemudian server mengembalikan kode respons 401. Browser kemudian menampilkan prompt nama pengguna / kata sandi.

Namun, di somesite.com, saya tidak mendapatkan prompt otorisasi sama sekali, hanya halaman yang mengatakan saya tidak berwenang. Apakah somesite tidak menerapkan alur kerja Basic Auth dengan benar, atau ada hal lain yang perlu saya lakukan?

bapa
sumber
Apakah Anda yakin menggunakan Auth Dasar dan tidak Digest?
b_erb
tidak yakin perbedaannya, kecuali jika Anda bertanya apakah saya basis-64 encode. jika saya melakukan itu secara terprogram itu akan, tetapi ikal melakukan itu untuk saya.
bpapa
Anda dapat mengetahui otentikasi apa yang digunakan dari header respons WWW-Authenticate (nilai: Digest atau Basic).
Kniganapolke
2
Saya pikir pertanyaan ini perlu diulang. Lebih dari satu responden menganggap itu pertanyaan tentang curl daripada browser.
LS
Apakah maksud Anda "otentikasi" saat menggunakan istilah "otorisasi"?
Tarun

Jawaban:

160

Untuk membantu semua orang menghindari kebingungan, saya akan merumuskan kembali pertanyaan dalam dua bagian.

Pertama: "bagaimana cara membuat permintaan HTTP terotentikasi dengan browser, menggunakan otentikasi BASIC?" .

Di browser Anda dapat melakukan autentikasi dasar http terlebih dahulu dengan menunggu perintah yang akan datang, atau dengan mengedit URL jika Anda mengikuti format ini: http://myusername:[email protected]

NB: perintah curl yang disebutkan dalam pertanyaan itu baik-baik saja, jika Anda memiliki command-line dan curl yang diinstal. ;)

Referensi:

Juga sesuai dengan halaman 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.

Pertanyaan kedua dan nyata adalah "Namun, pada somesite.com, saya tidak mendapatkan prompt otorisasi sama sekali, hanya halaman yang mengatakan saya tidak berwenang. Apakah somesite tidak menerapkan alur kerja Basic Auth dengan benar, atau ada sesuatu apa yang harus saya lakukan? "

Dokumentasi curl mengatakan -uopsi mendukung banyak metode otentikasi, Basic menjadi default.

Nicocube
sumber
3
Pertanyaannya adalah tentang ikal, yang bukan browser.
Ray Baxter
26
Anda mungkin belum membaca pertanyaan sepenuhnya, seperti yang tertulis di bawah perintah curl: "Namun, saat ini saya tidak memiliki akses ke curl (cerita panjang), dan saya ingin melakukannya dari browser web, jika mungkin . " ;)
Nicocube
3
Saya sepenuhnya setuju bahwa ikal bekerja dengan baik, saya secara pribadi menggunakannya secara teratur, tetapi pertanyaannya bukan tentang ikal ...
Nicocube
4
Penanya ingin tahu mengapa auth. tidak berfungsi di browser. Pertanyaannya bukan tentang Curl.
LS
68

Sudahkah Anda mencoba?

curl somesite.com --user username:password
daronwolff
sumber
13
@daronwolff Anda hanya mengganti posisi argumen dan mengganti -u dengan --user (yang hanya jangka panjang), tetapi selain itu Anda menulis persis apa yang sudah ditulis OP dalam pertanyaannya
Murmel
3
Penanya ingin tahu mengapa auth. tidak berfungsi di browser. Pertanyaannya bukan tentang Curl.
LS
15

Anda mungkin memiliki cache nama pengguna / kata sandi lama yang tidak valid di browser Anda. Coba bersihkan mereka dan periksa lagi.

Jika Anda menggunakan IE dan somesite.com berada di zona keamanan Intranet Anda, IE mungkin mengirim kredensial windows Anda secara otomatis.

AUSteve
sumber
8

WWW-Otentikasi tajuk

Anda juga dapat memperoleh ini jika server mengirim kode respons 401 tetapi tidak mengatur header WWW-Authenticate dengan benar - Saya harus tahu, saya baru saja memperbaikinya dalam kode sendiri karena aplikasi VB tidak memunculkan prompt otentikasi.

Chris McCauley
sumber
6

Jika tidak ada kredensial yang disediakan di header permintaan, berikut ini adalah respons minimum yang diperlukan untuk IE untuk meminta pengguna untuk kredensial dan mengirimkan kembali permintaan.

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

Anda dapat menggunakan Postman sebagai plugin untuk chrome. Ini memberikan kemampuan untuk memilih jenis otentikasi yang Anda butuhkan untuk setiap permintaan. Dalam menu itu Anda dapat mengonfigurasi pengguna dan kata sandi. Tukang pos akan secara otomatis menerjemahkan konfigurasi ke header otentikasi yang akan dikirim bersama permintaan Anda.

Mgccon
sumber