2011-02-07 2 views
0

최근에 서버가 리디렉션을 반환하면 NetworkCredential 및 HttpWebRequest.Credentials와 관련하여 question을 요청했습니다. 내 시나리오에서 NetworkCredential 인스턴스의 CredentialCache를 만드는 것이 효과적이라고 판단했습니다. 이제 모든 도메인 이름이 하드 코딩 된 CredentialCache를 만드는 임시 메서드가 있습니다. 효과적이었습니다.리디렉션을 알면 HttpWebRequest.Credentials에 대한 CredentialCache 빌드

 CredentialCache cache = new CredentialCache(); 
     cache.Add(new Uri("http://example.com"), "Negotiate", loginCredentials); 
     cache.Add(new Uri("http://redirected.example.com"), "Negotiate", loginCredentials); 
     request.Credentials = cache; 

이제 이것을 더 유연하게 만들 필요가 있습니다. 리디렉션에 대한 전체 아이디어는 서버에서의로드 균형 조정입니다. 클라이언트는 HttpWebRequest.GetResponse()를 호출 할 때까지 리디렉션되는 위치를 정확히 알 수 없습니다. 리디렉션 된 각 서버가 포함될 때이를 포함하도록 CredentialCache를 작성하는 기본 방법은 무엇입니까? 또한 이것을 어렵게 만드는 합리적 이유는 무엇입니까? 하나의 NetworkCredentials 인스턴스가 각 리디렉션에 대해 HttpWebRequest.Credentials를 만족시킬 수없는 이유는 무엇입니까? 리디렉션에서 자격 증명을 다시 사용하기 위해 보안 취약성이 도입됩니까?

감사합니다.

답변

0

네이트,

나는 당신이 "협상"사용 참조, 왜 당신은 모든 리디렉션에 대한

CredentialCache.DefaultNetworkCredentials or CredentialCache.DefaultCredentials 

를 사용하지 않는? MSDN에서

다음 DefaultNetworkCredentials 속성에서 반환

자격 증명은 NTLM은 , 협상 및 Kerberos 기반 인증에 적용 입니다. DefaultNetworkCredentials에 의해 반환

자격 증명은 응용 프로그램이 실행되는 현재 보안 컨텍스트에 대한 인증 자격 증명을 나타냅니다. 클라이언트 쪽 응용 프로그램의 경우 일반적으로 응용 프로그램을 실행하는 사용자의 Windows 자격 증명 (사용자 이름, 암호 및 도메인)은 입니다. ASP.NET 응용 프로그램의 경우 기본 네트워크 자격 증명은 로그인 사용자의 자격 증명이거나 사용자가 가장 된 것입니다.

+0

나는 내가 할 수있는 바랍니다. 우리는 프로그램이 지역 계정으로 운영 될 수 있어야합니다. 그래서, 사용자가 유효한 kerberos 자격 정보를 입력하는 로그인 대화 상자 창을 작성했습니다. – Nate

2

코드를 사용하여 401 오류가 발생했습니다 (SharePoint 2010 OOB 웹 서비스). 그런 다음 다른 사이트에서 확인한 후 아래 줄에 "Negotiate"대신 "NTLM"을 시도했습니다. 지금은 괜찮아.

작동하지 않음 :

cache.Add(New Uri(myProxy.Url), "Negotiate", New NetworkCredential("UserName", "Password", "Domain")) 

작업 :

cache.Add(New Uri(myProxy.Url), "NTLM", New NetworkCredential("UserName", "Password", "Domain")) 
관련 문제