我正在学习Apigility(Apigility docu -> REST Service Tutorial)并尝试通过cURL发送带有基本身份验证的POST请求:
$ curl -X POST -i -H "Content-Type: application/hal+json" -H "Authorization: Basic YXBpdXNlcjphcGlwd2Q=" http://apigilityhw.sandbox.loc/status
YXBpdXNlcjphcGlwd2Q=
是带有我的凭据apiuser:apipwd
的基本64位编码字符串。凭据保存在/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"
这里的错误在哪里?如何让它发挥作用?
答案 0 :(得分:183)
curl -u username:password http://
curl -u username http://
从文档页面:
-u, - user< user:password>
指定用于服务器身份验证的用户名和密码。 覆盖-n, - netrc和--netrc-optional。
如果您只是指定用户名,curl将提示输入密码。
用户名和密码在第一个冒号上分开 使用此选项无法在用户名中使用冒号。 密码仍然可以。
将Kerberos V5与基于Windows的服务器一起使用时,应该包括 用户名中的Windows域名,以供服务器使用 成功获取Kerberos票证。如果你没有那么初始 身份验证握手可能会失败。
使用NTLM时,可以简单地将用户名指定为用户 名称,没有域名,如果有一个域和林 例如你的设置。
要指定域名,请使用“低级别登录名”或“UPN” (用户主要名称)格式。例如,EXAMPLE \ user和 user@example.com分别。
如果您使用启用Windows SSPI的curl二进制文件并执行Kerberos V5, 谈判,NTLM或摘要认证,然后你可以告诉curl 通过指定从您的环境中选择用户名和密码 带有此选项的单个冒号:“ - u:”。
如果多次使用此选项,将使用最后一个选项。
http://curl.haxx.se/docs/manpage.html#-u
请注意,您不需要--basic
标记,因为它是默认标记。
答案 1 :(得分:7)
使用OAuth或其他身份验证服务时,您通常也可以在查询字符串中而不是在授权标头中发送访问令牌,例如:
GET https://www.example.com/v1/users/1?access_token=abcdefghijklmnopqrstuvwxyz1234567890ABCD
答案 2 :(得分:6)
作为标题
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/