【问题标题】:Get the NTLM credentials from the Response on an APSX page从 ASPX 页面上的响应中获取 NTLM 凭据
【发布时间】:2008-10-01 17:39:22
【问题描述】:

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

如果我硬编码一些凭据(根据附加的代码),它可以工作,但理想情况下,我会回显 .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(); 
} 

【问题讨论】:

    标签: c# asp.net credentials


    【解决方案1】:

    您当然可以获取调用者的登录名,但不能获取密码。 NTLM 使用质询/响应机制,因此永远不会传输密码。您的服务器必须有权访问密码等效项(哈希)才能形成质询并检查响应,但即使您可以掌握它,该密码等效项对您尝试形成的凭据也没有用处将被服务器 B 接受。

    如果您可以设置模拟,如另一个答案中所述,即使这样也不一定能得到您想要的。默认情况下,不允许模拟服务器进程将其身份传输到另一台服务器。第二个跃点称为委托,需要在所涉及的服务器(和/或 Active Directory)上显式配置。

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

    【讨论】:

      【解决方案2】:

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

      从那里你应该能够弄清楚。

      【讨论】:

        【解决方案3】:

        你能在你的场景中模拟调用者的身份吗?这样你甚至不需要传递凭据,例如:

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

        在服务器 A 的 web.config 中。但这当然取决于您的情况,因为您可能不希望服务器 A 那样。但如果可以的话,这可以在没有自定义代码的情况下解决您的问题。

        这是设置模拟的链接:http://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingorigcaller

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-24
          • 1970-01-01
          • 2012-11-18
          相关资源
          最近更新 更多