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


161

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"

여기서 실수는 어디입니까? 작동시키는 방법?

답변:


291
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기본값이므로 플래그 가 필요하지 않습니다 .


14
비밀번호에?와 같은 특수 문자가 포함 된 경우 또는 @ 그런 다음 단일 진드기에 넣어야합니다. curl -u 'username :? p @ ssword'http : //
Mirko Ebert

2
그러나이 실제 요청은 어떻게 생겼습니까? 나는 많은 사람들이 curl로 테스트하고 싶지만 그들이 사용하는 언어로 코드 요법을 작성합니다. --user info가 헤더로 전송됩니까? 그렇다면 머리글의 모양
Verty00

Postman의 @GautamKathrotiya에는 요청의 인증 탭에 기본 인증 옵션이 있으며이 인증 헤더를 삽입합니다.
Kyle Calica-St

1
@ Verty00은 curl과 함께 -v 플래그를 사용하여 요청의 내용을 볼 수 있습니다.
Zach

17

헤더로

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/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.