我正在使用適用於Intranet環境的ASP.NET 4.0 MVC3 Web應用程序。該應用程序使用Windows身份驗證。其應用程序池由spn在域控制器上設置的域用戶運行。身份驗證使用Kerberos(在一些額外的配置之後在IE和Firefox上)。在IIS上運行時,ASP.NET Web應用程序中的模擬不起作用
現在我想上傳文件到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和fiddler檢查了頭文件),並且我看到以下內容:
Authorization: Negotiate YIIFpQYGKwYBBQUCoIIFmTCCBZWgJDAiBgkqhkiC9x...
在IIS服務器上運行時模擬不起作用的任何想法?
隨着'<身份冒充=「真」 />'我的應用程序作爲該用戶所有的時間。我不能允許。該Web應用程序需要作爲自定義域帳戶運行,並且已經爲此配置。只有這一行代碼需要以當前登錄用戶的身份訪問網絡資源,而不是作爲運行該應用程序的自定義域帳戶。我在這裏還是錯過了一些東西?我目前正在尋找協議轉換(http://msdn.microsoft.com/en-us/library/ms998355.aspx)我認爲這適用於我的情況。你可否確認? –
我必須使用impersonate =「true」,否則我得到ImpersonationLevel'Identify'。所以我使用它與我想要運行該應用程序的DOMAIN \ USER的用戶名和密碼。 –