Linux,Unix,BSD

[linux] curl을 이용한 Basic 인증하기

채윤아빠 2021. 5. 9. 10:47
728x90
반응형

CURL 명령을 이용하여 Basic 인증을 수행한 HTTP 요청 처리에 대하여 알아 보겠습니다.

Basic 인증은 "HTTP authentication":https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication 문서에 설명이 잘 되어 있는데, 서버에서 기본적으로 인증 정보 없이 요청을 받은 경우에 "401 Unauthorized" 오류 코드가 반환됩니다.

 

출처: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication


출처 : https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication


정상적으로 요청을 수행하려면 "Authorization" 헤더가 필요한데, 여기에 로그인 아이디 및 비밀정보를 토큰화하여 전달하게 됩니다. 토큰화하는 방법은 "<아이디>:<비밀번호>" 문자열을 단순하게 base64로 인코딩한 결과를 전달해 주면 됩니다. 인증이 필요한 요청에는 매번 "Authorization" 헤더를 포함하여 전달해 줘야 하는데, 그런 이유로 보안에 매우 취약합니다.


"CURL" 명령으로 Basic 인증을 처리할 때는 "-u" 옵션으로 다음과 같이 이용하면 됩니다.

$ curl -v http://authorized.com/target -u "login:password"
> GET /target HTTP/1.1
> Host: authorized.com
> Authorization: Basic bG9naW46cGFzc3dvcmQ=
> User-Agent: curl/8.1.2
> Accept: */*
>
< HTTP/1.1 307 Temporary Redirect
< Server: openresty
< Date: Thu, 30 Nov 2023 05:36:16 GMT
< Content-Type: text/html
< Content-Length: 168
< Connection: keep-alive
< Location: http://authorized.com/

그러면 자동으로 "Authorization" 헤더를 만들어서 서버에 요청하게 됩니다.

아니면 아래와 같이 "-u" 옵션 대신 "-H" 옵션으로 직접 인증 정보를 만들어서 보낼 수도 있습니다.

$ curl -v http://authorized.com/target -H "Authorization: Basic bG9naW46cGFzc3dvcmQ="
> GET /target HTTP/1.1
> Host: authorized.com
> User-Agent: curl/8.1.2
> Accept: */*
> Authorization: Basic bG9naW46cGFzc3dvcmQ=
>
< HTTP/1.1 307 Temporary Redirect
< Server: openresty
< Date: Thu, 30 Nov 2023 05:36:43 GMT
< Content-Type: text/html
< Content-Length: 168
< Connection: keep-alive
< Location: http://authorized.com/

아무래도 첫 번째 "-u" 옵션으로 요청 처리를 하는 것이 보다 쉬워 보이긴 합니다. ^^


참고자료