วิธีกำหนดการรับรองความถูกต้อง HTTP พื้นฐานโดยใช้ cURL อย่างถูกต้อง?


161

ฉันเรียนรู้ Apigility ( Apigility docu -> REST Service Tutorial ) และพยายามที่จะส่งคำขอ POST ด้วยการตรวจสอบเบื้องต้นผ่านทาง cURL:

$ 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-optional

หากคุณเพียงระบุชื่อผู้ใช้ curl จะถามรหัสผ่าน

ชื่อผู้ใช้และรหัสผ่านจะถูกแยกในโคลอนแรกซึ่งทำให้ไม่สามารถใช้โคลอนในชื่อผู้ใช้ด้วยตัวเลือกนี้ รหัสผ่านสามารถยัง

เมื่อใช้ Kerberos V5 กับเซิร์ฟเวอร์ที่ใช้ Windows คุณควรรวมชื่อโดเมน Windows ในชื่อผู้ใช้เพื่อให้เซิร์ฟเวอร์รับ Kerberos Ticket ได้สำเร็จ หากคุณไม่ทำเช่นนั้นการจับมือรับรองความถูกต้องเบื้องต้นอาจล้มเหลว

เมื่อใช้ NTLM คุณสามารถระบุชื่อผู้ใช้เป็นชื่อผู้ใช้โดยไม่มีโดเมนหากมีโดเมนเดียวและฟอเรสต์ในการตั้งค่าของคุณ

ในการระบุชื่อโดเมนให้ใช้รูปแบบชื่อเข้าสู่ระบบระดับล่างหรือรูปแบบ UPN (ชื่อผู้ใช้หลัก) ตัวอย่างเช่น EXAMPLE \ user และ user@example.com ตามลำดับ

หากคุณใช้ไบนารี curl ที่เปิดใช้งาน Windows SSPI และดำเนินการตรวจสอบ Kerberos V5, Negotiate, NTLM หรือ Digest คุณสามารถบอก curl ให้เลือกชื่อผู้ใช้และรหัสผ่านจากสภาพแวดล้อมของคุณโดยระบุโคลอนเดี่ยวด้วยตัวเลือกนี้: "-u:" .

หากใช้ตัวเลือกนี้หลายครั้งตัวเลือกสุดท้ายจะถูกใช้

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

โปรดทราบว่าคุณไม่จำเป็นต้อง--basicตั้งค่าสถานะเนื่องจากเป็นค่าเริ่มต้น


14
หากรหัสผ่านของคุณมีอักขระพิเศษเช่นนี้ หรือ @ จากนั้นคุณต้องใส่มันลงในเห็บเดี่ยว ชื่อผู้ใช้ curl -u:? p @ ssword 'http: //
Mirko Ebert

2
แต่คำขอที่แท้จริงนี้มีลักษณะอย่างไร ฉันรู้สึกว่ามีผู้คนมากมายทดสอบด้วย curl แต่จากนั้นเขียนโค้ดและอะไรก็ได้ที่พวกเขาใช้ ข้อมูลผู้ใช้ถูกส่งไปเป็นหัวข้อหรือไม่ ถ้าเป็นเช่นนั้นส่วนหัวนั้นควรมีลักษณะอย่างไร
Verty00

@GautamKathrotiya ในบุรุษไปรษณีย์มีตัวเลือก Auth พื้นฐานในแท็บการอนุญาตของคำขอจะแทรกส่วนหัวการอนุญาตนี้ให้คุณ
Kyle Calica-St

1
@ Verty00 คุณสามารถใช้แฟล็ก -v พร้อม curl เพื่อดูเนื้อหาของคำขอ
ซัค

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/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.