CURL kullanarak temel HTTP kimlik doğrulaması nasıl doğru şekilde tanımlanır?


162

Apigility ( Apigility docu -> REST Service Tutorial ) öğreniyorum ve cURL üzerinden temel kimlik doğrulama ile bir POST isteği göndermeye çalışıyorum:

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

YXBpdXNlcjphcGlwd2Q=benim kimlik bilgileri ile temel 64 kodlanmış dizedir apiuser:apipwd. Kimlik bilgileri /data/htpasswd( apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/) içine kaydedilir .

Şöyle görünüyor:

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"

Burada hata nerede? Nasıl çalışır?

Yanıtlar:


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

Dokümantasyon sayfasından:

-u, --kullanıcı <kullanıcı: şifre>

Sunucu kimlik doğrulaması için kullanılacak kullanıcı adını ve parolayı belirtin. İsteğe bağlı olarak -n, --netrc ve --netrc'yi geçersiz kılar.

Sadece kullanıcı adını belirtirseniz, curl bir parola ister.

Kullanıcı adı ve parolalar ilk iki noktaya bölünür, bu da bu seçenekle kullanıcı adında iki nokta üst üste işareti kullanılmasını imkansız hale getirir. Parola yine de olabilir.

Kerberos V5'i Windows tabanlı bir sunucuyla kullanırken, sunucunun Kerberos Biletini başarıyla alması için kullanıcı adına Windows etki alanı adını eklemeniz gerekir. Bunu yapmazsanız, ilk kimlik doğrulama anlaşması başarısız olabilir.

NTLM kullanılırken, örneğin kurulumunuzda tek bir etki alanı ve orman varsa, kullanıcı adı etki alanı olmadan yalnızca kullanıcı adı olarak belirtilebilir.

Etki alanı adını belirtmek için Alt Düzey Oturum Açma Adı veya UPN (Kullanıcı Asıl Adı) biçimlerini kullanın. Örneğin, sırasıyla EXAMPLE \ kullanıcı ve user@example.com.

Windows SSPI özellikli bir curl ikili dosyası kullanır ve Kerberos V5, Anlaşma, NTLM veya Özet kimlik doğrulaması gerçekleştirirseniz, bu seçenekle tek bir iki nokta belirterek curl'u ortamınızdan kullanıcı adını ve parolayı seçmesini söyleyebilirsiniz: "-u:" .

Bu seçenek birkaç kez kullanılırsa, son seçenek kullanılır.

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

--basicVarsayılan olarak bayrağa ihtiyacınız olmadığını unutmayın.


14
Şifreniz? Gibi bazı özel karakterler içeriyorsa? veya @ sonra tek kenelere koymanız gerekir. curl -u 'kullanıcı adı:? p @ ssword' http: //
Mirko Ebert

2
ama bu gerçek istek neye benziyor? Bir sürü insan curl ile test gibi hissediyorum ama kullandıkları hangi dilde kod vb yazın. --user bilgisi başlık olarak gönderilir mi? Eğer öyleyse bu başlık neye
benzemelidir

Postacı'da @GautamKathrotiya, bir isteğin Yetkilendirme sekmesinde Temel Yetkilendirme seçeneği vardır, bu Yetkilendirme başlığını sizin için ekler.
Kyle Calica-St

1
@ Verty00, isteğin içeriğini görmek için -v bayrağını curl ile kullanabilirsiniz.
Zach

17

başlık olarak

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/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.