Bagaimana cara mendefinisikan otentikasi HTTP dasar menggunakan cURL dengan benar?

161

Saya sedang belajar Apigility ( Apigility docu -> Tutorial Layanan REST ) dan mencoba mengirim permintaan POST dengan otentikasi dasar via cURL:

$ curl -X POST -i -H "Content-Type: application/hal+json" -H "Authorization: Basic YXBpdXNlcjphcGlwd2Q=" http://apigilityhw.sandbox.loc/status

YXBpdXNlcjphcGlwd2Q=adalah string dasar 64 yang dikodekan dengan kredensial saya apiuser:apipwd. Kredensial disimpan di /data/htpasswd( apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/).

Terlihat seperti ini:

HTTP/1.1 401 Unauthorized
Server: nginx/1.4.7
Date: Mon, 22 Sep 2014 07:48:47 GMT
Content-Type: application/problem+json
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.5.12-1~dotdeb.1
WWW-Authenticate: Basic realm="api"

Di mana kesalahannya di sini? Bagaimana cara kerjanya?

automatix
sumber

Jawaban:

291
curl -u username:password http://
curl -u username http://

Dari halaman dokumentasi:

-u, --user <user: password>

Tentukan nama pengguna dan kata sandi yang akan digunakan untuk otentikasi server. Mengganti -n, --netrc dan --netrc-opsional.

Jika Anda cukup menentukan nama pengguna, curl akan meminta kata sandi.

Nama pengguna dan kata sandi dipisah pada titik dua, yang membuatnya tidak mungkin menggunakan titik dua dalam nama pengguna dengan opsi ini. Kata sandi masih bisa.

Saat menggunakan Kerberos V5 dengan server berbasis Windows Anda harus memasukkan nama domain Windows di nama pengguna, agar server berhasil mendapatkan Tiket Kerberos. Jika tidak, maka jabat tangan otentikasi awal mungkin gagal.

Saat menggunakan NTLM, nama pengguna dapat ditentukan secara sederhana sebagai nama pengguna, tanpa domain, jika ada satu domain dan hutan di pengaturan Anda misalnya.

Untuk menentukan nama domain, gunakan format Nama Masuk Bawah atau UPN (Nama Pokok Pengguna). Misalnya, EXAMPLE \ user dan [email protected].

Jika Anda menggunakan biner ikal berkemampuan Windows SSPI dan melakukan otentikasi Kerberos V5, Negotiate, NTLM, atau Digest maka Anda dapat memberi tahu curl untuk memilih nama pengguna dan kata sandi dari lingkungan Anda dengan menentukan satu titik tunggal dengan opsi ini: "-u:" .

Jika opsi ini digunakan beberapa kali, yang terakhir akan digunakan.

http://curl.haxx.se/docs/manpage.html#-u

Perhatikan bahwa Anda tidak perlu --basicmenandai karena ini adalah bawaan.

Gajus
sumber
14
Jika kata sandi Anda mengandung beberapa karakter khusus seperti? atau @ maka Anda harus memasukkannya ke dalam kutu tunggal. curl -u 'username:? p @ ssword' http: //
Mirko Ebert
2
tetapi seperti apa sebenarnya permintaan ini? Saya merasa seperti banyak orang menguji dengan curl tetapi kemudian menulis kode dll dalam bahasa apa pun yang mereka gunakan. apakah info - pengguna dikirim sebagai tajuk? Jika demikian, seperti apakah tajuk itu
Verty00
@GautamKathrotiya di Postman ada opsi Auth Dasar di tab Otorisasi permintaan, itu akan memasukkan header Otorisasi ini untuk Anda.
Kyle Calica-St
1
@ Verty00 Anda dapat menggunakan flag -v dengan curl untuk melihat isi permintaan.
Zach
17

sebagai tajuk

AUTH=$(echo -ne "$BASIC_AUTH_USER:$BASIC_AUTH_PASSWORD" | base64 --wrap 0)

curl \
  --header "Content-Type: application/json" \
  --header "Authorization: Basic $AUTH" \
  --request POST \
  --data  '{"key1":"value1", "key2":"value2"}' \
  https://example.com/
srghma
sumber