Curl kullanarak yetkilendirme başlığı nasıl ayarlanır


397

CURL kullanarak yetkilendirme başlığını nasıl iletirim? (içinde çalıştırılabilir /usr/bin/curl).

Yanıtlar:


394

http://curl.haxx.se/docs/httpscripting.html

Bkz. Bölüm 6. HTTP Kimlik Doğrulaması

HTTP Kimlik Doğrulaması

HTTP Kimlik Doğrulaması, sunucuya kullanıcı adınızı ve şifrenizi söyleme yeteneğidir, böylece yaptığınız isteği yapmanıza izin verildiğini doğrulayabilir. HTTP'de kullanılan temel kimlik doğrulaması (varsayılan olarak curl'un kullandığı türdür) düz metindir tabanlıdır, bu da kullanıcı adı ve parolayı sadece hafifçe gizlenmiş, ancak yine de sizinle uzak sunucu arasındaki ağda koklayan herkes tarafından tamamen okunabilir anlamına gelir.

Curl'a kimlik doğrulaması için bir kullanıcı ve parola kullanmasını söylemek için:

curl --user name:password http://www.example.com

Site farklı bir kimlik doğrulama yöntemi gerektirebilir (sunucu tarafından döndürülen başlıkları kontrol edin) ve ardından --ntlm, --digest, --negotiate veya even --anyauth size uygun seçenekler olabilir.

Bazen HTTP erişiminize yalnızca bir HTTP proxy kullanılarak erişilebilir. Bu özellikle çeşitli şirketlerde yaygındır. Bir HTTP proxy'si, istemcinin İnternet'e erişmesine izin vermek için kendi kullanıcı ve parolasını gerektirebilir. Kıvrımlı olanları belirtmek için aşağıdaki gibi bir şey çalıştırın:

curl --proxy-user proxyuser:proxypassword curl.haxx.se

Proxy'niz NTLM yöntemi kullanılarak kimlik doğrulamasının yapılmasını gerektiriyorsa, Digest kullanımı --proxy-digest gerektiriyorsa --proxy-ntlm kullanın.

Bu kullanıcı + şifre seçeneklerinden herhangi birini kullanır, ancak şifre bölümünü dışarıda bırakırsanız, curl şifreyi etkileşimli olarak sorar.

Bir program çalıştırıldığında, sistemin çalışan süreçlerini listelerken parametrelerinin görülebileceğini unutmayın. Böylece, diğer kullanıcılar parolalarınızı düz komut satırı seçenekleri olarak iletirseniz izleyebilirler. Bunu atlatmanın yolları var.

HTTP Kimlik Doğrulaması bu şekilde çalışırken, birçok web sitesinin oturum açma vb. Sağladığında bu kavramı kullanmayacağını belirtmek gerekir. Bununla ilgili daha fazla ayrıntı için aşağıdaki Web Girişi bölümüne bakın.


16
@Vixed Bu soru açıkça PHP ile ilgili değildir. [Google'ın sonuçlarındaki sorun nedir?
Oli

Sorusu belki OP soru başlığını değiştirmek gerekir, Yetkilendirme değil kimlik doğrulaması hakkında
reçel

320

Tıklamak zorunda kalmamak için eklemeniz yeterlidir:

curl --user name:password http://www.example.com

veya OAuth 2 için kimlik doğrulaması göndermeye çalışıyorsanız:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com

15
Çoğu API artık başlık yetkilendirme belirteçlerini kullanıyor. -HSeçenek büyüktür.
eliocs

14
-U veya --user kullanırsanız, Curl kimlik bilgilerini -H Authorization: Basic <Base64EncodedCredentials>
Base64'e kodlar

Ben HMAC-SHA256her zaman eksik yetkilendirme üstbilgisi hatası alıyorum ile bir yetkilendirme başlığı eklemeye çalışıyorum
Steven Aguilar

2
Eğer gerekiyorsa Ayrıca, <Base64EncodedCredentials>Timothy-kansaki @ tarafından belirtildiği gibi, sen komutunu kullanarak kodlanmış kimlik alabilirsiniz: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com. Referans için bkz. Stackoverflow.com/questions/16918602/…
David Golembiowski

170

Taşıyıcı jetonları şöyle görünür:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com

7
'Temel' yetkilendirme yapmak istiyorsanız, 'Temel' için 'Taşıyıcı'yı değiştirin
darren

En garip şey var, "Yanlış Yetkilendirme başlığı biçimi" ve "HTTP-200" alıyorum. Yani sunucu yetkimi kabul ediyor, ama biçim yanlış mı?
Mart'ta Groostav

65

( php-curl cevabı arayanlar için )

$service_url = 'https://example.com/something/something.json';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate

$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);

64

Bu benim için çalıştı:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/

JWT için ne kullanıyorsun?
Ciasto piekarz

1
Bunu mu demek istediniz Authorization: bearer xxxxxxxxx?
jlh

@jlhBearer
Daniel W.

Neredeyse büyük / küçük harfe duyarlı olmadığından emindim, ama yanılmışım gibi görünüyor. Evet demek istedim Bearer.
JLH

20

HTTP Temel Yetkilendirme için:

curl -H "Authorization: Basic <_your_token_>" http://www.example.com

değiştirin _your_token_ve URL.


Oauth kullanırken Yetkilendirme belirteci nereden gelir? Kullanıcı ve şifre kullandığım bir siteden dosya indirmek için curl kullanmaya çalışıyorum ama oauth2 kullanımından dolayı başarısız görünüyor.
ctrl-alt-delete

@ toasteez bir jeton almak için Oauth2 akışını geçmek zorunda. Genellikle iki adımlı bir işlemdir ve sunucunun belgelerinde ayrıntılı olarak belirtilmelidir.
Devaroop

13
iyi cevap. küçük bir yardımcı echo -ne "<your-user>:<your-pass>" | base64 --wrap 0temel kimlik doğrulama jetonunu oluşturur.
Mike D

3
@MikeD -H "Authorization: Basic <_your_token_>"ile aynı etkiyi yapar --user login:password. Kontrol edebilirsinizcurl -v
vladkras

1
@vladkras cevabım bu cevap için bir yardımcı . tecrübelerime göre, jetonu oluşturmak için kıvırmak yerine nasıl oluşturulacağını anlamak daha iyidir.
Mike D

14

Kullanırken dikkatli olun: curl -H "Authorization: token_str" http://www.example.com

token_strve Authorizationboşlukla ayrılmalıdır, aksi takdirde sunucu tarafı HTTP_AUTHORIZATIONortamı alamaz .


2
Doğru değil, beyaz boşluk gerekiyorsa, HTTP sunucunuz bozuldu. Ayrıca bir tür ve sonra jeton iki dizeye ihtiyacınız var.
Alexis Wilke

5

Görüşme sırasında jetonunuz yoksa, biri jetonu almak için diğeri ise jetonu yanıttan çıkarmak için iki arama yapmanız gerekir,

grep belirteci | kes -d, -f1 | kes -d \ "-f4

çünkü jetonun yanıttan çıkarılmasıyla ilgilenen kısımdır.

echo "Getting token response and extracting token"    
def token = sh (returnStdout: true, script: """
    curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
""").split()

Jetonu çıkardıktan sonra, aşağıdaki çağrıları yapmak için jetonu kullanabilirsiniz.

echo "Token : ${token[-1]}"       
echo "Making calls using token..."       
curl -S -i -k  -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources 
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.