2014-09-22 16 views
63

tôi đang học Apigility (Apigility docu -> REST Service Tutorial) và cố gắng gửi một yêu cầu POST với basic authentication qua cURL:Làm thế nào để xác định xác thực HTTP cơ bản bằng cách sử dụng cURL chính xác?

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

YXBpdXNlcjphcGlwd2Q= là cơ sở 64 mã hóa chuỗi với các thông tin của tôi apiuser:apipwd. Thông tin đăng nhập được lưu trong /data/htpasswd (apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/).

trông như thế này:

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" 

Đâu là sai lầm ở đây? Làm thế nào để nó hoạt động?

+0

Tôi đã cập nhật câu trả lời của mình. Tôi nghĩ bạn nên chuyển mã thông báo truy cập vào chuỗi truy vấn. – Wilt

Trả lời

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

Từ trang tài liệu:

-u, --user < người dùng: mật khẩu >

Chỉ định tên người dùng và mật khẩu để sử dụng cho xác thực máy chủ. Ghi đè -n, --netrc và --netrc-optional.

Nếu bạn chỉ cần chỉ định tên người dùng, thì curl sẽ nhắc nhập mật khẩu.

Tên người dùng và mật khẩu được phân tách trên dấu hai chấm đầu tiên, trong đó làm cho nó không thể sử dụng dấu hai chấm trong tên người dùng với tùy chọn này. Mật khẩu vẫn có thể.

Khi sử dụng Kerberos V5 với máy chủ chạy Windows, bạn nên bao gồm tên miền Windows trong tên người dùng, để máy chủ có thể có được vé Kerberos thành công. Nếu không, thì bắt tay xác thực ban đầu có thể không thành công.

Khi sử dụng NTLM, tên người dùng có thể được chỉ định đơn giản là tên người dùng , không có tên miền, nếu có một miền và rừng trong ví dụ thiết lập của bạn.

Để chỉ định tên miền sử dụng Tên đăng nhập cấp dưới hoặc định dạng UPN (Tên người dùng chính). Ví dụ: EXAMPLE \ user và [email protected] tương ứng.

Nếu bạn sử dụng một nhị phân curl của Windows SSPI-enabled và thực hiện Kerberos V5, Negotiate, NTLM hoặc Digest authentication thì bạn có thể nói với curl để chọn tên người dùng và mật khẩu từ môi trường của bạn bằng cách xác định một tràng duy nhất với điều này tùy chọn: "-u:".

Nếu tùy chọn này được sử dụng nhiều lần, tùy chọn cuối cùng sẽ được sử dụng.

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

Lưu ý rằng bạn không cần --basic cờ vì nó là mặc định.

+4

Nếu mật khẩu của bạn có chứa một số ký tự đặc biệt như thế nào? hoặc @ sau đó bạn phải đặt nó vào bọ ve đơn. tên người dùng curl -u ':? P @ ssword' http: // – tfb785

+0

nhưng yêu cầu thực tế này trông như thế nào? Tôi cảm thấy như rất nhiều người thử nghiệm với curl nhưng sau đó viết mã ect trong bất kỳ ngôn ngữ mà họ sử dụng. thông tin --user có được gửi dưới dạng tiêu đề không? Nếu vậy tiêu đề đó trông như thế nào – Verty00

6

Khi sử dụng OAuth hoặc dịch vụ xác thực khác, bạn có thể thường xuyên cũng có thể gửi thẻ truy cập của bạn trong một chuỗi truy vấn thay vì trong một tiêu đề uỷ quyền, vì vậy cái gì đó như:

GET https://www.example.com/v1/users/1?access_token=abcdefghijklmnopqrstuvwxyz1234567890ABCD 
Các vấn đề liên quan