CURL का उपयोग करके बुनियादी HTTP प्रमाणीकरण को सही तरीके से कैसे परिभाषित किया जाए?


161

मैं Apigility सीख रहा हूं ( Apigility दीक्षा -> REST सेवा ट्यूटोरियल ) और URUR के माध्यम से मूल प्रमाणीकरण के साथ POST अनुरोध भेजने की कोशिश कर रहा हूं :

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

YXBpdXNlcjphcGlwd2Q=मेरी साख के साथ आधार 64 एन्कोडेड स्ट्रिंग है apiuser:apipwd। क्रेडेंशियल /data/htpasswd( apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/) में सहेजे गए हैं ।

इस तरह दिखता है:

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"

यहाँ गलती कहाँ है? इसे कैसे प्राप्त करें?

जवाबों:


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

प्रलेखन पृष्ठ से:

-u, --user <उपयोगकर्ता: पासवर्ड>

सर्वर प्रमाणीकरण के लिए उपयोग करने के लिए उपयोगकर्ता नाम और पासवर्ड निर्दिष्ट करें। ओवरराइड्स -n, --netrc और --netrc- वैकल्पिक।

यदि आप केवल उपयोगकर्ता नाम निर्दिष्ट करते हैं, तो कर्ल पासवर्ड के लिए संकेत देगा।

उपयोगकर्ता नाम और पासवर्ड पहले बृहदान्त्र पर विभाजित होते हैं, जो इस विकल्प के साथ उपयोगकर्ता नाम में एक बृहदान्त्र का उपयोग करना असंभव बनाता है। पासवर्ड, अभी भी कर सकते हैं।

विंडोज आधारित सर्वर के साथ केर्बरोस वी 5 का उपयोग करते समय, आपको सर्वर के लिए कर्बरोस टिकट प्राप्त करने के लिए उपयोगकर्ता नाम में विंडोज डोमेन नाम को शामिल करना चाहिए। यदि आप नहीं करते हैं तो प्रारंभिक प्रमाणीकरण हैंडशेक विफल हो सकता है।

NTLM का उपयोग करते समय, उपयोगकर्ता नाम को केवल डोमेन नाम के बिना उपयोगकर्ता नाम के रूप में निर्दिष्ट किया जा सकता है, यदि उदाहरण के लिए आपके सेटअप में एक एकल डोमेन और वन है।

डोमेन नाम निर्दिष्ट करने के लिए डाउन-लेवल लॉगऑन नाम या UPN (उपयोगकर्ता प्रधान नाम) स्वरूपों का उपयोग करें। उदाहरण के लिए, क्रमशः EXAMPLE \ user और user@example.com।

यदि आप एक विंडोज एसएसपीआई-सक्षम कर्ल बाइनरी का उपयोग करते हैं और कर्बरोस वी 5, नेगोशिएट, एनटीएलएम या डाइजेस्ट प्रमाणीकरण करते हैं तो आप इस विकल्प के साथ एकल कोलोन निर्दिष्ट करके अपने वातावरण से उपयोगकर्ता नाम और पासवर्ड का चयन करने के लिए कह सकते हैं: "-u:" ।

यदि यह विकल्प कई बार उपयोग किया जाता है, तो पिछले एक का उपयोग किया जाएगा।

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

ध्यान दें कि आपको --basicध्वज की आवश्यकता नहीं है क्योंकि यह डिफ़ॉल्ट है।


14
यदि आपके पासवर्ड में कुछ विशेष अक्षर हैं जैसे? या @ तब आपको इसे सिंगल टिक में डालना होगा। curl -u 'उपयोगकर्ता नाम: p @ ssword' http: //
Mirko Ebert

2
लेकिन यह वास्तविक अनुरोध कैसा दिखता है? मुझे लगता है कि बहुत से लोग कर्ल के साथ परीक्षण करते हैं, लेकिन फिर जिस भी भाषा में वे उपयोग करते हैं, उसमें कोड ect लिख देते हैं। क्या --user जानकारी हेडर के रूप में भेजी जाती है? यदि ऐसा है तो हेडर कैसा दिखना चाहिए
Verty00

@GautamKathrotiya पोस्टमैन में एक अनुरोध के प्राधिकरण टैब में एक मूल प्रामाणिक विकल्प है, यह आपके लिए इस प्राधिकरण शीर्षलेख को सम्मिलित करेगा।
काइल कालिका-सेंट

1
@ Verty00 आप अनुरोध की सामग्री को देखने के लिए कर्ल के साथ -v ध्वज का उपयोग कर सकते हैं।
ज़ैक

17

हेडर के रूप में

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/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.