2009-11-05 1 views
7

HTTPWebRequest를 사용하여 웹 서비스에 액세스하려고하는데 자격 증명을 전달하는 데 문제가 있습니다 (아래 코드 참조). 디버거에 내장 된 자격 증명 개체 인 nc와 request.Credentials에 대한 할당을 볼 수 있지만 코드의 마지막 줄에 도달하면 인증되지 않은 오류 메시지가 표시됩니다. 우리 서버의 사람들이 서버에서 요청을 보았고 자격 증명이 전달되지 않았습니다. Credentials 객체에 문제가 있습니까? 아니면 여기에서하지 않겠습니까?C#에서 HttpWebRequest에 NetworkCredential을 ASP.Net에서 전달하는 중 페이지

Uri requestUri = null; 
Uri.TryCreate("https://mywebserver/webpage"), 
    UriKind.Absolute, out requestUri); 

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create 
    (requestUri); 

NetworkCredential nc = 
    new NetworkCredential("user", "password"); 

request.Credentials = nc; 

request.Method = WebRequestMethods.Http.Get; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
+3

당신이 지나가고있는 것을보기 위해 피들러를 사용 했습니까? 나는 이런 것들을 평가하기 위해 서버 사람들에게 의존하는 것을 싫어한다. :) – JustLoren

+0

JustLoren -이 댓글을 게시 할 때까지 나는 Fiddler에 대해 몰랐고, 나는 그것을 다운로드했고 Auth 탭 아래에 Proxy-Authorization Header가 없다고 말한다. 권한 부여 헤더가 없으므로 코드에 문제가 있다고 생각합니다. –

+0

내부 웹 서비스를 호출하기 위해 프록시 클래스를 생성하지 않는 이유가 있습니까? – kd7

답변

1

마이크로 소프트 프리미어 지원은 마지막으로 나를 증명하고 "기본"권한을 추가 CredentialCache 클래스를 사용하여이 문제를 해결 도움 :

NetworkCredentials 중 하나를 매우 직관적이지, 또는 색다른 있습니다
NetworkCredential nc = 
    new NetworkCredential(GetSetting("username"), GetSetting("password")); 
CredentialCache cache = new CredentialCache(); 

cache.Add(requestUri, "Basic", nc); 

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri); 
+0

ss l을 사용하지 않으면 암호가 일반 텍스트로 전송됩니까? –

12

, 아니면 둘다. 에 관계없이, 당신은 모두 NetworkCredentials을 우회하여 문제를 해결할 수 있으며, (내가 발견 mark.michaelis.net의 의례하는)이 방법을 사용

/* http://mark.michaelis.net/Blog/CallingWebServicesUsingBasicAuthentication.aspx */ 
byte[] credentialBuffer = new UTF8Encoding().GetBytes(username + ":" +password); 
req.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer); 

그래서 수동의 헤더를 만드는하고있는 당신의 HttpWebRequest 및 기본 인증 헤더에 나타나는 내용을 삽입합니다. 매력처럼 작동합니다.

+1

훌륭해,이 사람이 일 했어, 받아 들여진 대답이 나에게 효과가 없었어. –

관련 문제