[http] cURL을 사용하여 기본 HTTP 인증을 올바르게 정의하는 방법은 무엇입니까?

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/


답변