2009-05-29 4 views
7

내 ASP.NET 2.0 응용 프로그램은 NTLM 인증을 사용하는 회사 인트라넷 내의 사이트에 HTTPWebRequest을 만듭니다. 전달 된 자격 증명을리디렉션을 통해 인증 된 HttpWebRequest, 자격 증명을 유지 하시겠습니까?

요청의 일환으로
HttpWebRequest req = WebRequest.Create(queryUrl) as HttpWebRequest; 
NetworkCredential cred = new NetworkCredential(username, 
       pwd, domain); 
req.Credentials = cred; 

HttpWebResponse response = req.GetResponse() as HttpWebResponse; 

, 몇 가지가 있습니다 .. (보안 로그 이것을 확인)

일부 단축 코드는 다음과 성공적으로 도메인에 인증 서비스 계정에 대한 있습니다

이 요청을 내 배포 환경 (Windows 2k3)에서 만들면 401 Unauthorized 오류가 반환됩니다. (예 : Windows 2000) 사이트에서, 첫 번째 리디렉션 코드가 반환 된 후 (301 Moved), 내 요청 objec t는 리디렉션을 따르려고 시도합니다.

기본적으로 누군가가 리디렉션을 따르는 인증 된 HttpWebRequests를 둘러싼 문제를 알고 있습니까?

PS - 확실한 해결 방법은 단순히 리디렉션 페이지를 요청하는 것입니다 -하지만 인트라넷 사이트를 담당하는 관리자는 특정 페이지를 통해 저를 리디렉션하여 내 응용 프로그램의 사용을 모니터링 할 수 있습니다.

+0

하면 클라이언트가 재 지정의 최종 목표에 대한 클라이언트 인증 시도를하고 있는지 여부를 확인하기 위해 (예를 들어, 피들러와) 네트워크 트래픽을 본 수 : 여기

은 예입니다? 리디렉션 된 서버에 자동으로 인증하지 못하면 부주의 한 자격 증명 유출을 방지하기 위해 .NET 내부의 보안 조치가 될 수 있습니다. – EricLaw

+0

나는 똑같은 문제에 직면 해 있으며 아직도 문제를 파악할 수 없다. http : // stackoverflow.com/questions/3562979/making-a-web-web-page-windows-authentication-requires-windows-authentication –

답변

11

HttpWebRequestHttpWebRequest의 경우 리디렉션간에 자격 증명을 다시 사용하려면 자격 증명 캐시를 사용해야합니다. NetworkCredentials 개체를 할당하면 첫 번째 요청에만 사용됩니다.

HttpWebRequest req = WebRequest.Create(queryUrl) as HttpWebRequest; 
NetworkCredential cred = new NetworkCredential(username, pwd, domain); 
var cache = new CredentialCache {{queryUrl, "Ntlm", cred}}; 
req.Credentials = cache; 
HttpWebResponse response = req.GetResponse() as HttpWebResponse; 
1

귀하의 승인 방법에 따라 달라질 수 있습니다. 체계가 작동합니다. 네트워크 자격 증명은 if의 NTLM 부분에만 도움이됩니다. 나는 당신이 액세스하려고하는 사이트가 폼 인증을 사용하고 있다고 의심합니다. 이 경우 로그인 할 때 인증 쿠키를 받아야합니다. 이후의 요청에이를 포함시켜야합니다. 리디렉션 후. WebRequest 객체에는 쿠키를 유지하는 데 사용할 수있는 헤더 컬렉션이 있다고 생각합니다. 피들러 또는 방화범을 사용하여 정상적으로 탐색 할 때 무엇이오고 있는지 확인하는 것이 좋습니다.

-1

NTLM을 사용하는 경우 이것은 고전적인 2 홉 문제입니다. 클라이언트와 서버가 동일한 상자에 있고 자격 증명이 한 번만 전달됩니다 (추측하고있는 최종 대상 컴퓨터로 리디렉션).

환경을 구축하면 해당 환경에 배포 할 때 3 대의 기계가 관련되어 있습니다. 클라이언트 브라우저가 자격 증명을 server1에 전달하면 server1은 허용되지 않는 자격 증명을 server2에 전달하려고 시도합니다. 한 가지 해결 방법은 server1이 자격 증명을 server2에 전달할 수 있도록 해주는 Kerberos 인증 (엄격한 프로토콜)을 구현하는 것입니다.

+0

Tion에게 감사 드려요.하지만이 경우 문제가 아닌 것 같습니다. 자격증 명 객체 내 앱에 로그온 한 사용자와는 별도의 계정을위한 것이므로 실제로는 한 번 홉핑해야합니다. - 실제로 언급 했어야합니다 :) 서버에서 응답을받는 것과 관련하여 투명 리디렉션이 필요합니다. 문제는, 내가 리디렉션하는 대신 최종 URL을 지정하면 모두 작동합니다 ... –

관련 문제