如何使用cURL正确定义基本的HTTP身份验证?

我正在学习Apigility (Apigility文档-> REST服务教程),并试图通过cURL发送一个带有基本身份验证的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"

这里的错误在哪里?如何让它工作?

605058 次浏览
curl -u username:password http://
curl -u username http://

从文档页:

-u,——user <

指定用于服务器身份验证的用户名和密码。 覆盖-n,——netrc和——netrc可选

如果您只是指定用户名,curl将提示输入密码。

用户名和密码在第一个冒号上分开 不可能在用户名中使用冒号。 密码可以,仍然。

当您在基于Windows的服务器上使用Kerberos V5时,应该包含 在用户名中加入Windows域名,以便服务器能够 成功获得Kerberos Ticket。如果你没有那么首字母

.认证握手可能失败

当使用NTLM时,用户名可以简单地指定为user 名称,没有域名,如果有一个单独的域名和森林在

如果要指定域名,可以选择“低级登录名”或“UPN” (用户主体名)格式。例如,example \user和 分别为user@example.com。< / p >

如果您使用Windows sspi支持的curl二进制文件并执行Kerberos V5, 协商,NTLM或文摘身份验证,然后您可以告诉curl 通过指定从您的环境中选择用户名和密码 一个带有选项的冒号:" -u:"

如果多次使用此选项,则将使用最后一个选项。

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

注意,你不需要--basic标志,因为它是默认的。

作为标题

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/

弄清楚授权头应该是什么样子的最简单的方法可能是首先运行旋度- u(或将凭证放在URL中)和- v,输出将显示请求头:

$ curl -v -u 'apiuser:apipwd' ... http://apigilityhw.sandbox.loc/status


# OR putting the credentials in the URL:


$ curl -v ... http://apiuser:apipwd@apigilityhw.sandbox.loc/status
    

# copy and paste the "Authorization" header from the output:
    

$ curl -H 'Authorization: Basic YWRtaW46YXBpcHdk' ... http://apigilityhw.sandbox.loc/status