Mic*_* B. 5 impersonation kerberos .net-4.0 windows-authentication asp.net-mvc-3
我正在开发适用于 Intranet 环境的 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()
'...
Run Code Online (Sandbox Code Playgroud)
这在本地运行时有效,但是当我部署到服务器时,出现异常:
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)
Run Code Online (Sandbox Code Playgroud)
我读了一些关于传递凭据的信息,这在 NTLM 中是不可能的,但我确定我使用的是 Kerberos(我使用wireshark 和 fiddler 检查了标头),我看到以下内容:
Authorization: Negotiate YIIFpQYGKwYBBQUCoIIFmTCCBZWgJDAiBgkqhkiC9x...
Run Code Online (Sandbox Code Playgroud)
任何想法为什么在 IIS 服务器上运行时模拟不起作用?
我在这里找到了答案:
http://support.microsoft.com/kb/810572
“Kerberos 在负载平衡体系结构中不起作用,并且 IIS 会退回到 NTLM 身份验证。由于您无法使用 NTLM 进行委派,因此任何需要委派的应用程序或服务都无法工作。有关详细信息,请单击以下文章编号以查看微软的文章”
事实确实如此。我现在尝试使用另一台未负载平衡的机器并且它可以工作。
唯一仍然让我惊讶的是身份的 ImpersonationLevel 仍然Impersonate不是Delegate......
| 归档时间: |
|
| 查看次数: |
18652 次 |
| 最近记录: |