2008-10-01 3 views
1

NTLM 자격 증명을 사용하여 호출되는 ASPX 페이지 (서버 A)가 있습니다. 해당 페이지의 작업 중 일부는 HTML 페이지 (서버 B에서)를 호출하여 클라이언트로 다시 프록시하는 것입니다. (방화벽은 A에 대한 액세스를 허용하지만 B에 대한 액세스는 허용하지 않습니다. 사용자는 일반적으로 두 서버에 모두 액세스 할 수 있습니다.). 서버 B도 익명 액세스를 허용하지 않으므로 자격 증명을 제공해야합니다.APSX 페이지의 응답에서 NTLM 자격 증명 받기

첨부 된 코드에 따라 일부 자격 증명을 하드 코딩하면 작동하지만 이상 적으로 .aspx 페이지에서받은 자격 증명을 반향시킵니다. NetworkCredentials를 전달할 수있는 방법이 있습니까?

protected void Page_Load(object sender, EventArgs e) { 
    Response.Clear(); 
    WebClient proxyFile = new WebClient(); 
    CredentialCache cc = new CredentialCache(); 
    cc.Add(new Uri("http://serverB/"), "NTLM", 
     new NetworkCredential("userName", "password", "domain")); 
    proxyFile.Credentials = cc; 

    Stream proxyStream = proxyFile.OpenRead("http://serverB/Content/webPage.html"); 
    int i; 
    do { 
     i = proxyStream.ReadByte(); 
     if (i != -1) { 
      Response.OutputStream.WriteByte((byte)i); 
     } 
    } while (i != -1); 
    Response.End(); 
} 

답변

1

당신은 확실히 호출자의 로그인 이름을 얻을 수 있지만. NTLM은 챌린지/응답 메커니즘을 사용하므로 암호가 전송되지 않습니다. 챌린지를 구성하고 응답을 확인하기 위해서는 서버가 암호와 동등한 암호 (해시)에 액세스 할 수 있어야하지만 암호를 보유해도 암호가 동등한 자격 ​​증명을 만들려고하지 않아도됩니다. 서버 B가 승인합니다.

다른 답변에 설명 된대로 가장을 설정할 수있는 경우에도 반드시 원하는 것은 아닙니다. 기본적으로 가장하는 서버 프로세스는 다른 서버에 ID를 전송할 수 없습니다. 두 번째 홉은 위임이라고하며 관련 서버 (및/또는 Active Directory)에서 명시 적으로 구성해야합니다.

위임 이외에도 서버 A가 액세스하고 서버 B에 제공 할 수있는 자격 증명 데이터베이스를 유지 관리하는 것이 유일한 방법이라고 생각합니다. 보안 방법으로 구축하는 것은 미묘하고 시간이 많이 걸리는 프로세스입니다. 반면에 기본적으로 위임이 비활성화되는 이유가 있습니다. 서버에 로그인하면 다른 서버에 액세스하기 위해 내 ID를 사용할 수 있습니까? 위임은 가장 간단한 옵션이지만 사용자 A의 ID로 무책임한 일을하기 위해 서버 A가 손상되지 않도록해야합니다.

0

Page.User는 페이지가 실행중인 사용자의 보안 사용자를받습니다.

거기에서 알아낼 수 있어야합니다.

0

시나리오에서 발신자 신원을 가장 할 수 있습니까? 당신도 자격 증명을 함께 전달해야 wouldnt가 그런 식으로, 예 :

<authentication mode="Windows" /> 
<identity impersonate="true" /> 
서버 A의 Web.config의에서

하지만 서버 A에 대한하지만 경우에 그 원하지 않을 수 있기 때문에 이것은 물론, 상황에 따라 달라집니다 이것은 사용자 정의 코드없이 문제를 해결할 수 있습니까?

Heres는 가장 설정에 대한 링크 : 암호를 http://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingorigcaller