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=
내 자격 증명이있는 기본 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"
여기서 실수는 어디입니까? 작동시키는 방법?
답변
curl -u username:password http://
curl -u username http://
설명서 페이지에서 :
-u, –user <사용자 : 암호>
서버 인증에 사용할 사용자 이름과 비밀번호를 지정하십시오. -n, –netrc 및 –netrc-optional을 재정의합니다.
단순히 사용자 이름을 지정하면 curl에서 암호를 묻습니다.
사용자 이름과 비밀번호는 첫 번째 콜론으로 분할되므로이 옵션으로 사용자 이름에 콜론을 사용할 수 없습니다. 여전히 암호는 가능합니다.
Windows 기반 서버에서 Kerberos V5를 사용할 때 서버가 성공적으로 Kerberos 티켓을 얻으려면 사용자 이름에 Windows 도메인 이름을 포함시켜야합니다. 그렇지 않으면 초기 인증 핸드 셰이크가 실패 할 수 있습니다.
NTLM을 사용할 때 예를 들어 설정에 단일 도메인 및 포리스트가있는 경우 도메인없이 사용자 이름으로 간단하게 사용자 이름을 지정할 수 있습니다.
도메인 이름을 지정하려면 하위 레벨 로그온 이름 또는 UPN (User Principal Name) 형식을 사용하십시오. 예를 들어, EXAMPLE \ user 및 user@example.com입니다.
Windows SSPI 지원 curl 바이너리를 사용하고 Kerberos V5, 협상, NTLM 또는 다이제스트 인증을 수행하는 경우 “-u :”옵션으로 단일 콜론을 지정하여 curl에서 환경에서 사용자 이름 및 비밀번호를 선택하도록 지시 할 수 있습니다. .
이 옵션을 여러 번 사용하면 마지막 옵션이 사용됩니다.
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/