C# 从APSX页面上的响应获取NTLM凭据

C# 从APSX页面上的响应获取NTLM凭据,c#,asp.net,credentials,C#,Asp.net,Credentials,我有一个ASPX页面(在服务器A上),它是使用NTLM凭据调用的。该页面的部分工作是调用HTML页面(在服务器B上)并将其代理回客户端。(防火墙允许访问A,但不允许访问B。通常允许用户访问两台服务器。)。服务器B也不允许匿名访问,所以我需要向它提供凭据 如果我硬编码了一些凭证(按照所附的代码),它会工作,但理想情况下我会回显.aspx页面接收到的凭证。有什么方法可以获取这些网络凭据以便我可以传递它们吗 protected void Page_Load(object sender, EventAr

我有一个ASPX页面(在服务器A上),它是使用NTLM凭据调用的。该页面的部分工作是调用HTML页面(在服务器B上)并将其代理回客户端。(防火墙允许访问A,但不允许访问B。通常允许用户访问两台服务器。)。服务器B也不允许匿名访问,所以我需要向它提供凭据

如果我硬编码了一些凭证(按照所附的代码),它会工作,但理想情况下我会回显.aspx页面接收到的凭证。有什么方法可以获取这些网络凭据以便我可以传递它们吗

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(); 
} 

用户将为您获取运行该页面的用户的安全主体


从那里您应该能够找到它。

Page.User将为您获取运行该页面的用户的安全主体


您应该可以从中找到答案。

您可以在场景中模拟呼叫者身份吗?这样,您甚至不需要传递凭证,例如:

<authentication mode="Windows" />
<identity impersonate="true" />

在您的场景中,您能否模拟呼叫者身份?这样,您甚至不需要传递凭证,例如:

<authentication mode="Windows" />
<identity impersonate="true" />

您当然可以获取呼叫者的登录名,但不能获取密码。NTLM使用质询/响应机制,因此永远不会传输密码。您的服务器必须具有对等效密码(散列)的访问权限,才能形成质询并检查响应,但即使您能够获得该等效密码,您也无法尝试形成将被服务器B接受的凭据

如果您可以设置模拟,如另一个答案中所述,即使这样也不一定能满足您的需求。默认情况下,不允许模拟服务器进程将其标识传输到其他服务器。第二个跃点称为委派,需要在相关服务器(和/或Active Directory)上明确配置


除了授权之外,我认为您唯一的选择是维护一个服务器a可以访问并向服务器B提供的凭据数据库。以安全的方式构建该数据库是一个微妙而耗时的过程。另一方面,默认情况下禁用委派是有原因的。当我登录到服务器时,是否希望允许它使用我的身份访问其他服务器?委派对您来说是最简单的选择,但您需要确保服务器A不会因使用用户身份做不负责任的事情而受到损害。

您当然可以获得呼叫者的登录名,但不能获得密码。NTLM使用质询/响应机制,因此永远不会传输密码。您的服务器必须具有对等效密码(散列)的访问权限,才能形成质询并检查响应,但即使您能够获得该等效密码,您也无法尝试形成将被服务器B接受的凭据

如果您可以设置模拟,如另一个答案中所述,即使这样也不一定能满足您的需求。默认情况下,不允许模拟服务器进程将其标识传输到其他服务器。第二个跃点称为委派,需要在相关服务器(和/或Active Directory)上明确配置

除了授权之外,我认为您唯一的选择是维护一个服务器a可以访问并向服务器B提供的凭据数据库。以安全的方式构建该数据库是一个微妙而耗时的过程。另一方面,默认情况下禁用委派是有原因的。当我登录到服务器时,是否希望允许它使用我的身份访问其他服务器?委派对您来说是最简单的选择,但您需要确保服务器A不会因使用用户身份做不负责任的事情而受到损害