2014-02-14 2 views
0

인증 헤더를 받으면 HTTP GET 요청을 보내고 다이제스트 방법을 사용하여 인증하려고합니다. 내 코드가 Firefox에 동일한 인증 응답을 생성하고 동일한 인증 요청을받은 경우에도 401 인증되지 않은 응답을 계속받습니다. 나는 인기있는 노드 모듈 "요청"을 동일한 결과로 시도했다. 다음은 두 요청의 tcpdump 출력입니다.nodejs 다이제스트 인증에 실패했습니다.

15:19:08.589647 IP 192.168.18.1.33972 > 192.168.20.220.30005: tcp 0 
....E..<[email protected]@.............u5a.........9..\......... 
"`A......... 
15:19:08.608304 IP 192.168.20.220.30005 > 192.168.18.1.33972: tcp 0 
....E..<[email protected]=...........u5....#<a.......aN......... 
.h.<"`A..... 
15:19:08.608333 IP 192.168.18.1.33972 > 192.168.20.220.30005: tcp 0 
[email protected]@.............u5a.....#=...s.T..... 
"`A..h.< 
15:19:08.608872 IP 192.168.18.1.33972 > 192.168.20.220.30005: tcp 70 
[email protected]@.............u5a.....#=...s....... 
"`A..h.<GET/HTTP/1.1 
Host: 192.168.20.220:30005 
Connection: keep-alive 


15:19:08.626556 IP 192.168.20.220.30005 > 192.168.18.1.33972: tcp 0 
[email protected]=..#........u5....#[email protected] 
.h.O"`A. 
15:19:08.631951 IP 192.168.20.220.30005 > 192.168.18.1.33972: tcp 228 
[email protected]=..>........u5....#[email protected] 
.h.Q"`A.HTTP/1.1 401 Unauthorized 
Content-Length: 0 
WWW-Authenticate: Digest realm="IgdAuthentication", domain="/", nonce="YmM4ZWY0YjE6MWY4ZjVkMmQ6IGIwNjdkZWI=", qop="auth", algorithm=MD5, opaque="5ccc09c403ebaf9f0171e9517f40e41" 


15:19:08.631966 IP 192.168.18.1.33972 > 192.168.20.220.30005: tcp 0 
[email protected]@.............u5a.....$!...{.T..... 
"`A".h.Q 
15:19:08.634442 IP 192.168.18.1.33973 > 192.168.20.220.30005: tcp 0 
....E..<[email protected]@. 
...........u5...$......9..\......... 
"`A#........ 
15:19:08.653166 IP 192.168.20.220.30005 > 192.168.18.1.33973: tcp 0 
....E..<[email protected]=...........u5....~w...%....3.......... 
.h.i"`A#.... 
15:19:08.653201 IP 192.168.18.1.33973 > 192.168.20.220.30005: tcp 0 
[email protected]@. 
...........u5...%..~x...s.T..... 
"`A'.h.i 
15:19:08.653534 IP 192.168.18.1.33973 > 192.168.20.220.30005: tcp 524 
[email protected] @[email protected]%..~x...s.`..... 
"`A(.h.iGET/HTTP/1.1 
Authorization: Digest username="admin", realm="IgdAuthentication", nonce="YmM4ZWY0YjE6MWY4ZjVkMmQ6IGIwNjdkZWI=", uri="/", algorithm=MD5, response="1d0539755e0e2ca204a9821027041e8b", qop=auth, nc=00000001, cnonce="MjMwMjkw", opaque="5ccc09c403ebaf9f0171e9517f40e41" 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Host: 192.168.20.220:30005 
Connection: keep-alive 


15:19:08.672345 IP 192.168.20.220.30005 > 192.168.18.1.33973: tcp 0 
[email protected]=...........u5....~x...1.. 
.h.|"`A(
15:19:10.633047 IP 192.168.18.1.33972 > 192.168.20.220.30005: tcp 0 
[email protected]@.............u5a.....$!...{.T..... 
"`C..h.Q 
15:19:10.651962 IP 192.168.20.220.30005 > 192.168.18.1.33972: tcp 0 
[email protected][email protected]&..... 
.h.8"`C. 
15:19:10.651998 IP 192.168.18.1.33972 > 192.168.20.220.30005: tcp 0 
[email protected]@.............u5a.....$"...{.T..... 
"`C..h.8 
15:19:10.653565 IP 192.168.18.1.33973 > 192.168.20.220.30005: tcp 0 
....E..4. 
@[email protected] 
...........u5...1..~x...s.T..... 
"`C..h.| 
15:19:10.711119 IP 192.168.20.220.30005 > 192.168.18.1.33973: tcp 0 
[email protected]=...........u5....~x...2.. 
.h.s"`C. 
15:19:12.674799 IP 192.168.20.220.30005 > 192.168.18.1.33973: tcp 228 
[email protected]=...........u5....~x...2.. 
.h.."`C.HTTP/1.1 401 Unauthorized 
Content-Length: 0 
WWW-Authenticate: Digest realm="IgdAuthentication", domain="/", nonce="YWU1ZjhkMWM6MzFmZjllMDA6YzAxNjY4MGM=", qop="auth", algorithm=MD5, opaque="5ccc09c403ebaf9f0171e9517f40e41" 

어떤이의 원인 두 요청 사이 다를 수 :

15:18:03.615255 IP 192.168.18.1.33966 > 192.168.20.220.30005: tcp 0 
....E..<[email protected]@.............u5K3........9..\......... 
"`.......... 
15:18:03.634223 IP 192.168.20.220.30005 > 192.168.18.1.33966: tcp 0 
....E..<[email protected]=...........u5......K3................. 
.g.t"`...... 
15:18:03.634269 IP 192.168.18.1.33966 > 192.168.20.220.30005: tcp 0 
[email protected]@.............u5K3.........s.T..... 
"`...g.t 
15:18:03.735485 IP 192.168.18.1.33966 > 192.168.20.220.30005: tcp 290 
[email protected]@.............u5K3.........s.v..... 
"`...g.tGET/HTTP/1.1 
Host: 192.168.20.220:30005 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 


15:18:03.753943 IP 192.168.20.220.30005 > 192.168.18.1.33966: tcp 0 
[email protected]=..2........u5......K3.1.. 
.g.."`.. 
15:18:03.762129 IP 192.168.20.220.30005 > 192.168.18.1.33966: tcp 228 
[email protected]=..M........u5......K3.1.. 
.g.."`..HTTP/1.1 401 Unauthorized 
Content-Length: 0 
WWW-Authenticate: Digest realm="IgdAuthentication", domain="/", nonce="ZDE4NTY3ZmM6NmYyMzA3NjM6YmQ5NGY3YTA=", qop="auth", algorithm=MD5, opaque="5ccc09c403ebaf9f0171e9517f40e41" 


15:18:03.762172 IP 192.168.18.1.33966 > 192.168.20.220.30005: tcp 0 
[email protected]@.............u5K3.1.......{.T..... 
"`...g.. 
15:18:06.215945 IP 192.168.18.1.33966 > 192.168.20.220.30005: tcp 564 
[email protected]@.............u5K3.1.......{....... 
"`...g..GET/HTTP/1.1 
Host: 192.168.20.220:30005 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Authorization: Digest username="admin", realm="IgdAuthentication", nonce="ZDE4NTY3ZmM6NmYyMzA3NjM6YmQ5NGY3YTA=", uri="/", algorithm=MD5, response="ae43f4fcaf71340f9c360877dad87c66", opaque="5ccc09c403ebaf9f0171e9517f40e41", qop=auth, nc=00000001, cnonce="9d1ea29022ec08d6" 


15:18:06.244925 IP 192.168.20.220.30005 > 192.168.18.1.33966: tcp 38 
[email protected]=.. 
........u5......K3.e.....Q..... 
.g.."`..HTTP/1.1 200 OK 
Content-Length: 0 

두 번째 실패 내 코드에서이다 : 첫 번째는 성공 파이어 폭스에서 무엇입니까?

+0

질문을 [편집]하여 질문의 형식을 올바르게 지정하십시오. 인사말은 필요하지 않으므로 마지막 두 문장도 함께 삭제하십시오. 그리고 네, 환영합니다. –

+0

nodejs 코드를 게시 할 수 있습니까? – jeremy

+0

도이 질문을 보았습니까? http://stackoverflow.com/questions/12850646/cant-get-digest-auth-to-work-with-node-js – jeremy

답변

0

이 문제는 별도의 연결에서 인증 요청 응답이 전송되어 인증 시도가 유효하지 않아서 발생했습니다. 해결책은 maxSockets가 1로 설정된 에이전트를 사용하여 새 연결을 열지 않고 두 번째 요청이 대기하기 전에 소켓이 닫히지 않도록하는 것입니다.