C# 从APSX页面上的响应获取NTLM凭据
我有一个ASPX页面(在服务器A上),它是使用NTLM凭据调用的。该页面的部分工作是调用HTML页面(在服务器B上)并将其代理回客户端。(防火墙允许访问A,但不允许访问B。通常允许用户访问两台服务器。)。服务器B也不允许匿名访问,所以我需要向它提供凭据 如果我硬编码了一些凭证(按照所附的代码),它会工作,但理想情况下我会回显.aspx页面接收到的凭证。有什么方法可以获取这些网络凭据以便我可以传递它们吗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
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不会因使用用户身份做不负责任的事情而受到损害