模拟在ASP.NET Web应用程序在IIS上运行时不工作(Impersonation in ASP

2019-06-25 13:23发布

我工作的ASP.NET 4.0 MVC3 Web应用程序,在局域网环境中工作。 该应用程序使用Windows身份验证。 它的应用程序池是由已SPN在域控制器上设置的域用户运行。 使用Kerberos(在IE和Firefox之后一些额外的配置)认证工作。

现在我想将文件上传到SharePoint,但对我来说上传文件作为当前登录到应用程序(使文件在SharePoint上创建与他/她的证书)的用户是很重要的。

我在下面的代码ResourceExists(Uri uri)功能:

'...
    Dim identity As System.Security.Principal.WindowsIdentity = HttpContext.User.Identity
    Dim impersonationContext = identity.Impersonate()
    response = request.GetResponse()
    impersonationContext.Undo()
'...

这个工程在本地运行时,但是当我部署到服务器我得到异常:

System.Net.WebException: The remote server returned an error: (401) Unauthorized.\r\n   at WebDav.WebDavClient.ResourceExists(Uri uri)\r\n   at Website.Website.WebdavController.Upload(HttpPostedFileBase file, UploadViewModel vm)

我读了一些有关传递的凭据,这是不可能的使用NTLM,但我相信我使用Kerberos(我检查使用Wireshark和提琴手头),我看到以下内容:

Authorization: Negotiate YIIFpQYGKwYBBQUCoIIFmTCCBZWgJDAiBgkqhkiC9x...

任何想法,为什么在IIS服务器上运行时的模拟不起作用?

Answer 1:

我找到了答案在这里:

http://support.microsoft.com/kb/810572

“Kerberos不以负载均衡架构工作,IIS回落到NTLM身份验证。因为你不能使用NTLM进行委派,任何应用程序或需要委派不起作用服务。欲了解更多信息,请单击下面的文章编号,以查看文章中的微软”

而这恰是如此。 我现在用另一台机器,是不是负载平衡和它的作品尝试。

仍然让我吃惊的唯一的事情就是身份的ImpersonationLevel仍ImpersonateDelegate ...



Answer 2:

设置完<identity impersonate="true"/>在你的web.config尝试以下操作:

using (((WindowsIdentity)User.Identity).Impersonate())
using (var client = new WebClient { Credentials = CredentialCache.DefaultNetworkCredentials })
{
    string result = client.DownloadString("http://sharepoint");
}


Answer 3:

你需要在IIS用于模拟工作正确地配置您的网站。

看配置ASP.NET模拟验证(IIS 7)



文章来源: Impersonation in ASP.NET web application does not work when running on IIS