2014-10-16 1 views
0

IIS에서 호스팅되는 데이터 서비스와 상호 작용하는 VB.net으로 작성된 프로그램이 있습니다. 인증은 사용자 Active Directory 자격 증명을 통해 처리됩니다. 내 고객 사이트 중 하나에서 (정확히 100 개 정도) 고객의 워크 스테이션에서 데이터 서비스에 대한 요청이 401 상태로 실패합니다.httpwebrequest 401 응답

몇 가지 추가 관련 정보 : 프로덕션 IIS 설치는 두 개의 노드 . 로드 밸런서는 트래픽을 노드에 전달합니다. 또한 문제의 워크 스테이션에서 Internet Explorer로 작성한 동일한 요청이 실패하지 않습니다.

VB 코드를 통해 요청을 할 때 무언가가 사용자의 자격 증명을 스트리핑하는 것으로 의심되지만 그게 무엇이 될지 모르겠다. 어떤 생각을 감상 할 수있다

Dim httpRequest As HttpWebRequest = Nothing 
    Dim httpResponse As HttpWebResponse = Nothing 

    httpRequest = WebRequest.Create("http://server/xyzportal/portal.php") 
    httpRequest.KeepAlive = False 
    httpRequest.UseDefaultCredentials = True 
    httpRequest.Method = "GET" 
    httpRequest.ContentLength = 0 
    httpRequest.Accept = "text/xml" 
    httpRequest.Timeout = 3000000 

    httpResponse = httpRequest.GetResponse 

: 여기

내가 요청을 만들기 위해 사용하는 VB 코드입니다.

추가 정보 : 여기에는 실패한 요청에 대한 IIS 로그 항목이 있습니다. 작업 기계의 요청에 대한 IIS 항목에 해당

2014-11-11 22:20:42 199.99.51.58 GET /xyzportal/portal.php - 80 - 199.99.50.128 - 401 2 5 0 
2014-11-11 22:20:42 199.99.51.58 GET /xyzportal/portal.php - 80 - 199.99.50.128 - 401 1 2148074248 0 

대비 : 2 항목이 Windows 사용자 이름을 포함하지 않습니다 알 수 있습니다. Windows 사용자 이름을 포함 않습니다 2 항목을 주목하라 :

2014-11-11 22:56:40 199.99.51.58 GET /xyzportal/portal.php - 80 - 199.99.50.128 - 401 2 5 0 
2014-11-11 22:56:40 199.99.51.58 GET /xyzportal/portal.php - 80 MYDOMAIN\jreichert 199.99.50.128 - 200 0 0 93 

IP 주소 199.99.50.128와 기계가로드 밸런서이다.

두 컴퓨터에서 동일한 도메인과 사용자로 로그인했습니다.

+0

자격 증명을 명시 적으로 만든 경우 발견했습니다. - 자격 증명 없음 NetworkCredential = New NetworkCredential (user, pass) - 자격 증명을 요청이 성공한 httpWebRequest.Credentials 속성에 할당합니다. 왜 이것이 한 대의 컴퓨터에서만 발생하는지에 대해 아직도 당황 스럽다. –

답변

0

프록시를 사용하는 경우 HttpRequest에 프록시 용 AD 사용자 자격 증명을 사용하지 말라고 말했기 때문에 401 Unauthorized 오류가 발생합니다. 즉 거부됩니다. 프록시를 통한 액세스. 그렇다면 다음과 같이 명시 적으로 말하십시오.

HttpRequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials 

정확히 동일한 문제가 있었지만 해결되었습니다.

+0

이 답변 자체로는 유용하지 않습니다. 'DefaultCredentials'가 이슈를 다루는 이유는 무엇입니까? – neontapir

+0

제안 해 주셔서 감사합니다.이 솔루션은 제 경우에는 작동하지 않았습니다. FWIW 요청이 프록시를 통해 라우팅되고 있다고 생각하지 않습니다. 제어판> 인터넷 옵션> 연결> LAN 설정의 워크 스테이션에 프록시가 설정되어 있지 않습니다. –

0

keepalive를 true로 설정해야합니다. keepalive = true로 설정하면 문제가 해결됩니다. 다음 페이지는 인증 핸드 셰이크에서 킵 얼라이브의 역할을 설명합니다

http://www.innovation.ch/personal/ronald/ntlm.html

난 아직도 요청이 내 고객 기반의 워크 스테이션 < 1 %에서 작동하지 않는 이유를 잘 모르겠습니다 때 킵 얼라이브 = false입니다. keepalive = true로 설정하면 워크 스테이션의 100 %에서 요청이 작동합니다.

추가 정보 : 인증 프로토콜이 Kerebos 인 경우 keepalive를 true로 설정해야합니다. 인증 프로토콜이 NTLM 인 경우 요청이 작동합니다. Kerebos가 요청이 작동하지 않는 두 대의 워크 스테이션에서만 Kerebos가 사용되는 이유는 알 수 없습니다.

관련 문제