curl을 사용하여 인증 헤더를 설정하는 방법


397

cURL을 사용하여 인증 헤더를 전달하려면 어떻게합니까? (에서 실행 가능 /usr/bin/curl).

답변:


394

http://curl.haxx.se/docs/httpscripting.html

6 부 참조. HTTP 인증

HTTP 인증

HTTP 인증은 서버에 사용자 이름과 비밀번호를 알려주는 기능으로 요청한 요청을 수행 할 수 있는지 확인할 수 있습니다. HTTP에서 사용되는 기본 인증 (기본적으로 curl이 사용하는 유형)은 일반 텍스트를 기반으로하므로 사용자 이름과 비밀번호를 약간 난독 처리하지만 사용자와 원격 서버 사이의 네트워크에서 스니핑하는 사람은 여전히 ​​읽을 수 있습니다.

curl에게 인증에 사용자 및 비밀번호를 사용하도록 지시하려면 다음을 수행하십시오.

curl --user name:password http://www.example.com

이 사이트에는 다른 인증 방법이 필요할 수 있으며 (서버에서 반환 한 헤더 확인) --ntlm, --digest, --negotiate 또는 --anyauth가 적합한 옵션 일 수 있습니다.

때로는 HTTP 프록시를 통해서만 HTTP 액세스를 사용할 수 있습니다. 이것은 여러 회사에서 특히 일반적으로 보인다. 클라이언트가 인터넷을 통과 할 수 있도록 HTTP 프록시에는 자체 사용자 및 비밀번호가 필요할 수 있습니다. curl을 가진 것을 지정하려면 다음과 같이 실행하십시오.

curl --proxy-user proxyuser:proxypassword curl.haxx.se

프록시에서 NTLM 방법을 사용하여 인증을 수행해야하는 경우 다이제스트 사용 --proxy-digest가 필요한 경우 --proxy-ntlm을 사용하십시오.

이러한 user + password 옵션 중 하나를 사용하지만 암호 부분을 제외하면 curl은 대화식으로 암호를 묻습니다.

프로그램이 실행될 때 시스템의 실행중인 프로세스를 나열 할 때 해당 매개 변수를 볼 수 있습니다. 따라서 일반 명령 줄 옵션으로 암호를 전달하면 다른 사용자가 암호를 볼 수 있습니다. 이것을 우회하는 방법이 있습니다.

HTTP 인증이 작동하는 방식이지만, 많은 웹 사이트는 로그인 등을 제공 할 때이 개념을 사용하지 않습니다. 자세한 내용은 아래 웹 로그인 장을 참조하십시오.


16
@Vixed이 질문은 PHP에 관한 것이 아닙니다. [Google 결과에 어떤 문제가 있습니까?]
Oli

문제는 인증이 아닌 인증에 관한 것이므로 OP는 질문 제목을 변경해야합니다.
jam

320

클릭 연결을하지 않아도되도록 추가하기 만하면됩니다.

curl --user name:password http://www.example.com

또는 OAuth 2에 대한 인증을 보내려고하는 경우 :

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com

15
많은 API가 이제 헤더 인증 토큰을 사용합니다. -H옵션은 중대하다.
eliocs

14
-u 또는 --user를 사용하는 경우 Curl은 자격 증명을 Base64로 인코딩하고 다음과 같은 헤더를 생성합니다.-H Authorization: Basic <Base64EncodedCredentials>
Timothy Kanski

인증 헤더가 HMAC-SHA256누락되었다는 오류 가 항상 표시 되는 인증 헤더를 추가하려고합니다.
Steven Aguilar

2
또한 <Base64EncodedCredentials>@ timothy-kansaki에서 언급 한대로가 필요한 경우 다음 명령을 사용하여 인코딩 된 자격 증명을 얻을 수 있습니다 cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com. 참고로, 참조 stackoverflow.com/questions/16918602/...
데이비드 Golembiowski

170

무기명 토큰은 다음과 같습니다.

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com

7
그리고 당신은 '기본'인증 '기본'에 대한, 단지 스왑 '무기명'을 할 찾고 있다면
대런

가장 이상한 점이 있는데 "잘못된 형식의 인증 헤더"와 "HTTP-200"이 나타납니다. 그래서 서버가 내 승인을 수락하지만 형식이 잘못 되었습니까?
Groostav

64

( php-curl 답변을 찾고있는 사람들을 위해 )

$service_url = 'https://example.com/something/something.json';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate

$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);

64

이것은 나를 위해 일했다 :

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/

JWT에 무엇을 사용하고 있습니까?
Ciasto piekarz

1
당신은 의미하지 Authorization: bearer xxxxxxxxx않습니까?
jlh

@jlh 당신은 의미Bearer
다니엘 W.

대소 문자를 구분하지 않는다는 것을 거의 확신했지만 틀린 것 같습니다. 그렇습니다 Bearer.
jlh

20

HTTP 기본 인증의 경우 :

curl -H "Authorization: Basic <_your_token_>" http://www.example.com

대체 _your_token_및 URL.


oauth를 사용할 때 인증 토큰은 어디에서 제공됩니까? curl을 사용하여 사용자와 암호를 사용하는 사이트에서 파일을 다운로드하려고하는데 oauth2가 사용 중이므로 실패한 것 같습니다.
ctrl-alt-delete

@toasteez 토큰을 받으려면 Oauth2 흐름을 거쳐야합니다. 일반적으로 2 단계 프로세스이며 서버 설명서에 자세히 설명되어 있습니다.
Devaroop

13
좋은 대답입니다. 작은 도우미 echo -ne "<your-user>:<your-pass>" | base64 --wrap 0가 기본 인증 토큰을 생성합니다.
Mike D

3
@MikeD는와 -H "Authorization: Basic <_your_token_>"같은 효과를 나타 --user login:password냅니다. 당신은 그것을 확인할 수 있습니다curl -v
vladkras

1
@ vladkras 내 답변은 이 답변 의 도우미 입니다. 내 경험상 curl에 의존하는 대신 토큰을 생성하는 방법을 이해하는 것이 좋습니다.
마이크 D

14

다음을 사용할 때주의하십시오. curl -H "Authorization: token_str" http://www.example.com

token_strAuthorization달리 서버 측이받지 않습니다 공백으로 구분해야합니다 HTTP_AUTHORIZATION환경을.


2
공백이 필요한 경우 HTTP 서버가 손상되었습니다. 또한 유형과 두 개의 문자열이 필요합니다.
Alexis Wilke

5

통화 할 때 토큰이없는 경우 토큰을 얻기 위해 두 번, 응답에서 토큰을 추출하기 위해 두 번의 호출을해야합니다.

grep 토큰 | 컷 -d, -f1 | 컷 -d \ "-f4

응답에서 토큰 추출을 처리하는 부분이기 때문입니다.

echo "Getting token response and extracting token"    
def token = sh (returnStdout: true, script: """
    curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
""").split()

토큰을 추출한 후 토큰을 사용하여 다음과 같이 후속 호출을 수행 할 수 있습니다.

echo "Token : ${token[-1]}"       
echo "Making calls using token..."       
curl -S -i -k  -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.