ฉันจะส่งส่วนหัวการอนุมัติโดยใช้ cURL ได้อย่างไร (ปฏิบัติการใน/usr/bin/curl
)
ฉันจะส่งส่วนหัวการอนุมัติโดยใช้ cURL ได้อย่างไร (ปฏิบัติการใน/usr/bin/curl
)
คำตอบ:
http://curl.haxx.se/docs/httpscripting.html
ดูส่วนที่ 6 การพิสูจน์ตัวตน HTTP
การตรวจสอบสิทธิ์ HTTP
การตรวจสอบสิทธิ์ HTTP คือความสามารถในการบอกเซิร์ฟเวอร์ชื่อผู้ใช้และรหัสผ่านของคุณเพื่อให้สามารถตรวจสอบว่าคุณได้รับอนุญาตให้ทำตามคำขอที่คุณทำ การรับรองความถูกต้องเบื้องต้นที่ใช้ใน HTTP (ซึ่งเป็นประเภท curl ที่ใช้โดยค่าเริ่มต้น) เป็นข้อความธรรมดา ใช้ซึ่งหมายความว่าจะส่งชื่อผู้ใช้และรหัสผ่านที่สับสนเล็กน้อยเท่านั้น แต่ยังคงสามารถอ่านได้อย่างสมบูรณ์โดยทุกคนที่สูดดม
หากต้องการบอก curl ให้ใช้ผู้ใช้และรหัสผ่านสำหรับการตรวจสอบสิทธิ์:
curl --user name:password http://www.example.com
ไซต์อาจต้องการวิธีการรับรองความถูกต้องที่แตกต่างกัน (ตรวจสอบส่วนหัวที่ส่งคืนโดยเซิร์ฟเวอร์) จากนั้น --ntlm, --digest, - เจรจาต่อรองหรือแม้กระทั่ง - anyauth อาจเป็นตัวเลือกที่เหมาะกับคุณ
บางครั้งการเข้าถึง HTTP ของคุณจะมีให้เฉพาะผ่านการใช้พร็อกซี HTTP เรื่องนี้ดูเหมือนจะเป็นเรื่องธรรมดาโดยเฉพาะอย่างยิ่งใน บริษัท ต่าง ๆ พร็อกซี HTTP อาจต้องการผู้ใช้และรหัสผ่านของตัวเองเพื่ออนุญาตให้ไคลเอนต์สามารถเข้าถึงอินเทอร์เน็ตได้ หากต้องการระบุผู้ที่มี curl ให้เรียกใช้ดังนี้:
curl --proxy-user proxyuser:proxypassword curl.haxx.se
หากพร็อกซีของคุณต้องการการรับรองความถูกต้องให้ทำโดยใช้วิธี NTLM ให้ใช้ --proxy-ntlm หากต้องการการใช้ Digest --proxy-digest
หากคุณใช้ตัวเลือกผู้ใช้ + รหัสผ่านเหล่านี้ แต่ไม่ได้ใส่ส่วนรหัสผ่าน Curl จะแจ้งให้ใส่รหัสผ่านแบบโต้ตอบ
โปรดทราบว่าเมื่อโปรแกรมทำงานพารามิเตอร์ของมันอาจเป็นไปได้ที่จะเห็นเมื่อแสดงรายการกระบวนการที่กำลังทำงานของระบบ ดังนั้นผู้ใช้รายอื่นอาจสามารถดูรหัสผ่านของคุณหากคุณผ่านตัวเลือกเหล่านี้เป็นบรรทัดคำสั่งธรรมดา มีวิธีหลีกเลี่ยงสิ่งนี้
เป็นที่น่าสังเกตว่าแม้ว่านี่จะเป็นวิธีการตรวจสอบสิทธิ์ HTTP แต่เว็บไซต์จำนวนมากจะไม่ใช้แนวคิดนี้เมื่อมีการลงชื่อเข้าใช้และอื่น ๆ โปรดดูบทการเข้าสู่ระบบทางเว็บด้านล่างเพื่อดูรายละเอียดเพิ่มเติม
เพียงเพิ่มเพื่อให้คุณไม่ต้องคลิกผ่าน:
curl --user name:password http://www.example.com
หรือถ้าคุณพยายามส่งการตรวจสอบสิทธิ์สำหรับ OAuth 2:
curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
-H
ตัวเลือกที่ดี
-H Authorization: Basic <Base64EncodedCredentials>
HMAC-SHA256
การรับข้อผิดพลาดของส่วนหัวการอนุญาตที่ขาดหายไปเสมอ
<Base64EncodedCredentials>
ดังกล่าวโดย @ ทิโมธี-kansaki, cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com
คุณจะได้รับการเข้ารหัสข้อมูลประจำตัวที่ใช้คำสั่ง: สำหรับการอ้างอิงดูstackoverflow.com/questions/16918602/…
โทเค็นผู้ถือมีลักษณะเช่นนี้:
curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
(สำหรับผู้ที่กำลังมองหาคำตอบphp-curl )
$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);
สิ่งนี้ใช้ได้กับฉัน:
curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
Authorization: bearer xxxxxxxxx
เหรอ
Bearer
Bearer
ใช่ฉันหมายถึง
สำหรับ HTTP Auth พื้นฐาน:
curl -H "Authorization: Basic <_your_token_>" http://www.example.com
แทนที่_your_token_
และ URL
echo -ne "<your-user>:<your-pass>" | base64 --wrap 0
จะสร้างโทเค็นการตรวจสอบสิทธิ์ขั้นพื้นฐาน
-H "Authorization: Basic <_your_token_>"
--user login:password
คุณสามารถตรวจสอบกับcurl -v
ระวังว่าเมื่อคุณใช้:
curl -H "Authorization: token_str" http://www.example.com
token_str
และAuthorization
ต้องคั่นด้วย white space มิฉะนั้นฝั่งเซิร์ฟเวอร์จะไม่ได้รับHTTP_AUTHORIZATION
สภาพแวดล้อม
หากคุณไม่มีโทเค็นในขณะที่ทำการโทรคุณจะต้องทำการโทรสองครั้งหนึ่งครั้งเพื่อรับโทเค็นและอีกอันเพื่อแยกโทเค็นแบบฟอร์มการตอบกลับให้ใส่ใจกับ
โทเค็น grep ตัด -d, -f1 | ตัด -d \ "-f4
เนื่องจากเป็นส่วนที่เกี่ยวข้องกับการแยกโทเค็นออกจากการตอบสนอง
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()
หลังจากแยกโทเค็นคุณสามารถใช้โทเค็นเพื่อโทรตามมาดังนี้
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