티스토리 툴바


자잘한 발견2010/07/15 04:25

인증이 필요한 웹서버에 접속할때 일반적으로 브라우저는 별도의 창을 보여주고 사용자명(user)과 열쇠글(password)를 요구한다.


하지만, 프로그램의 내부에서 Http클라이언트를 생성하거나, 스크립트등으로 직접 서버에 접속할 경우에는 조금 다른 방법이 필요하게 된다.


일반적인 브라우저 사용시의 처리는 다음과 같다.

   1. 서버가 요청(request)에 대한 응답(response)으로 401에러를 반환하고

   2. 브라우저가 사용자에게 인증용 정보를 요구하는 화면을 통해 정보를 입력받아

   3. 서버에게 인증정보를 덧붙인 요청(최초의 요청 + 인증정보)을 보내고

   4. 인증정보가 올바르면 서버는 요청된 자원의 응답을 보내준다.


401에러 응답 헤더의 예


HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="My Secret Server"  이부분으로 인증종류를 판별
Content-type: text/html
Date: Sat, 27 Feb 2010 10:57:43 GMT
Server: mcas/3.0 (RV230NE Ver 8.20; B2BUA; NTTEAST)
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate
Expires: 0
Connection: close
Content-Length: 2840
Status: 401

여기서 세번째의 인증정보를 덧붙인 요청을 처음부터 보내게 되면 요청을 재송신 할 필요없이 한번에 받는것이 가능해 진다.


이때 사용되는 것이 Authorization 헤더항목이다.


헤더의 설정은 일반적인 Http 헤더의 설정과 동일하다. 단 주의할점은 사용자명과 열쇠글은 Base64인코딩이 필요하다.


Authorization: Basic Base64인코딩된사용자명:열쇠글

  * Basic 인증만 다룬다.(다른 인증방법에 대해선 참고자료를 참조)

  * 사용자명:열쇠글 을 하나의 문자열로 보고 Base64인코딩을 한다

예) 사용자명 "Aladdin", 열쇠글 "open sesame"

-> 인코딩할 문자열 "Aladdin:open sesame"

-> 인코딩된 문자열 "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="



테스트

간단하게 telnet을 이용해서 테스트를 해보자

   * 주의 : Base64인코딩을 할수 있어야 한다. 여기서는 파이선을 사용했음.

telnet을 이용해서 서버에 접속한다. 단 포트는 80(Http)번으로 지정한다.

  telnet 서버명(또는 IP주소) 80

  GET 명령으로 특정 자원을 요청

  요청 헤더에 인증정보를 추가한다

  요청을 보낸다.



첫번째 시도 - 401 에러 발생


hyunt@debian:~$ telnet 192.168.1.1 80
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
GET http://ntt.setup/index.cgi/info_main HTTP/1.1
Host: ntt.setup     <- 마지막에 엔터키를 두번 입력할것

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="My Secret Server"
Content-type: text/html
Date: Sat, 27 Feb 2010 10:57:43 GMT
Server: mcas/3.0 (RV230NE Ver 8.20; B2BUA; NTTEAST)
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate
Expires: 0
Connection: close
Content-Length: 2840
Status: 401
 -- 이하 생략 --



두번째 시도 - 200 (성공)


hyunt@debian:~$ telnet 192.168.1.1 80
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
GET http://ntt.setup/index.cgi/info_main HTTP/1.1
Host: ntt.setup
Authorization: Basic dXNlcklkOnBhc3N3b3Jk  <- 마지막에 엔터키를 두번 입력할것

HTTP/1.1 200 OK
Content-type: text/html
Date: Sat, 27 Feb 2010 11:54:16 GMT
Server: mcas/3.0 (RV230NE Ver 8.20; B2BUA; NTTEAST)
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate
Expires: 0
Connection: close
Content-Length: 22169
Status: 200

<?xml version='1.0' encoding='EUC-JP'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='ja' lang='ja'>
-- 이하 생략 --


Base64인코딩하기

debian:~# python
Python 2.5.2 (r252:60911, Jan 24 2010, 21:03:09)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> base64.encodestring('userId:password')
'dXNlcklkOnBhc3N3b3Jk\n'
>>> exit()
debian:~#


실제로 응용을 하게 된다면 헤더의 항목에 "Authorization" 을 추가해 주는것만 기억해두면 될듯.(각 언어별 설정방법은 생략.)


----------------------------------------------------

wget 이용하기

처음에 이 자료를 찾아본 이유가 리눅스 서버에서 인터넷 단말의 정보를 긁어오는 스크립트가 필요했는데 인증에서 막힌것이 원인이었다. 텔넷으로 성공한뒤 wget이 뒤늦게 생각났다고나 할까...휴.

사실, wget을 이용하면 위에서 설명했던 부분들이 필요하지 않다.

wget의 옵션에 인증시 필요한 사용자명과 열쇠글을 설정하는것이 가능하다.

   * --http-user, --http-password 이용

debian:~# wget --http-user=userId --http-password=password http://ntt.setup/index.cgi/info_main
--2010-07-15 00:59:40--  http://ntt.setup/index.cgi/info_main
Resolving ntt.setup... 192.168.1.1
Connecting to ntt.setup|192.168.1.1|:80... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Connecting to ntt.setup|192.168.1.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22169 (22K) [text/html]
Saving to: `info_main'

100%[==========================================================================>] 22,169      --.-K/s   in 0.01s  

2010-07-15 00:59:47 (2.21 MB/s) - `info_main' saved [22169/22169]

debian:~#



[참고]

HTTP 헤더 필드 정의 : http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

HTTP 인증 관련 명세 : http://www.ietf.org/rfc/rfc2617.txt

HTTP 인증 이해 : http://msdn.microsoft.com/ko-kr/library/ms789031.aspx

파이선 Base64 인코딩 : http://snippets.dzone.com/posts/show/1618

wget : Man페이지

저작자 표시 비영리 변경 금지
Posted by 별나라 몽상가
소소한 이야기2009/10/06 16:44

거진 일주일을 계속 비가 옵니다.

더욱 절망적인건,
내일도 모레도 일기예보에서 "비" 라고 하네요....
무 슨 영국에 사는 것도 아니고,

둘다 자랑스런 저협압을 자랑하는 몽상가와 고양이는
비오는 날씨면 골골 합니다.
기 운도 안나고, 축 쳐져서는.....
특히나 고양이는 밥맛이 싹 달아나나 봅니다.
(고양이로부터 양식을 조달받는 몽상가는 더불어 큰일입니다. ^^;; )


이런 저런 일들이 겹쳐서일테지만,
한국 가고 싶은 생각이
소록소록 드는 그런 때 입니다.


저작자 표시 비영리 변경 금지
Posted by 별나라 몽상가
TAG , 저혈압
소소한 이야기2009/10/04 21:47

왜 항상 냉장고에는
마지막 한모금 정도를 남기고 새 쥬스팩이 뜯어져 있는지,
왜 그 한모금은 그리도 진했는지....

오 늘 저녁을 먹다가,
쥬스를 한잔 더 따르려 살짝 팩을 흔들었더니,
(오렌지 100% 쥬스 였더랍니다...)
고양이 가 말합니다.


"왜 흔들어? 난 찌꺼기 싫은데?!"



곧 4년차 접어드는 우주별 생활인데,
우 리 고양이가 살던 별은 참 특이했나 봅니다.

결혼 초에는
물대신 콜라만 마셔주시는  덕분에,
분리수거 쓰레기 버리는 날이면,
양손 가득 1.5리터 콜라페트병 뭉치를 들고,
우리 패스트 푸드점인줄 알겠다...라고 허탈한 농담을

그후, 콜라는 몸에 나쁘다는 설득과 닥달에 겨우 바꾼것이
사이다.
그나마도, 처음 마시고서는 찌푸리던 그 인상을 생각하면...
뭐 칠성 사이다와 맛이 같은 사이다는 없습니다.
(역시 코x콜라맛은 세계 공통이라는 무기가....)
여기 일본의 미쯔야 사이다(화살촉 세개 마크라 미쯔야 더군요 ㅡㅡ;;)에
익숙해 지기까지도 또 고초를 겪었지요.
물론 지금은 콜라도, 사이다도 끊어 주신 고양이에게
감사 감사 해야겠죠.
(지금도 고기에는 탄산음료라는 진리만은 절대로 양보 안해줍니다. 가끔 긴급 편의점 출동도...)

그래도 그런 고양이별 생활이 나올때마다,
몽상가는 웃음이 먼저 나오는 걸 보면,
서로 잘 맞는 외계인들이라고 생각합니다.


우주별 이상무! 란 말이 앞으로 100년은 더 갔으면 좋겠습니다.

저작자 표시 비영리 변경 금지
Posted by 별나라 몽상가
지극히 개인적인2009/08/28 05:22

네 꿈은 무었이더냐?
꿈도 잊은채 무슨 몽상가더냐.
정말로 하고 싶은 것은 무엇이냐.
벌써 두려운 것이냐, 아니면 이미 예전에 포기했다고 말하는 것이냐....

무엇을 걱정하는 것이냐.



잃을게 그렇게 많더냐?


저작자 표시 비영리 변경 금지
Posted by 별나라 몽상가
지극히 개인적인2009/01/31 23:55

나.

어느덧, 서른일곱이라는 견장을 두르게 되었다.

멋모르고 처음 내 자신을 찾아가던 내 가장 빛났었던 20대 초반,
서른 즈음에 라는 노래를 불러가며 안녕을 고했던 20대의 마지막 시절들,
그리고, 여기 일본이라는 땅에 온지 어느덧 7년차....
그렇게 30대 마저 얼마 남지 않게 된...

믿었던 것들, 확신했던 것들, 자신있었던 것들.....

그 모든것들이 이제 다 어디에 숨어 있는지.
모두 남아 있기는 한건지.



쉼없이 생각에 생각에 생각이 가지를 치던 머리는 이제
스스로 두통을 일으키며 움직이기를 거부하는 듯 하다.

반쯤 죽은 시체처럼,
쪼그리고 올라 앉은 의자에 기대거나,
절반만 일으킨 등을 침대에 묻어 가며,

생각이 별로 없어도,
그냥 흘러가며 지나치는 재미거리들에
흠뻑 취해서 지내려고 한다.



내 스스로가 이끌어가던 내 매일의 일상이,
이제는 그냥 흘러가는것 조차 둔감하고 싶어하는
헐떡이며 쫒아가려는 노력조차 귀찮아 하는...
호흡기에 연명하며 정맥으로 링거액을 흘려넣는 살덩어리가 되어버렸다.



요 며칠간 미친듯 생각하기가 싫어서
보고, 또 찾아 보고, 또 보고...
그렇게 영화며, 만화며....

다른때 같으면, 본 영화, 만화들을 끄적이며 남겨야 겠다고 할테지만,
이젠 그냥 흘린다..


그렇게,
내 하루하루가 흘러간다....


다시 시동을 걸어야 한다.
내 삶을 내가 다시 끌어가야 한다.





나이가 든다는걸,
느낀다.



늦어졌다.
내 머리속의 속도는.
빨라졌다.
세상의 속도는.



그렇게 여유스럽게, 자신있던 나는 사라지고.

늘, 시간이 아쉽고, 아깝고,
그러면서도, 실천은 안하고, 스트레스에 두통만 불러 일으키는

내가 있다.


그게


'나'가 되버렸다.
Posted by 별나라 몽상가