4

我正在使用適用於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服務器上運行時模擬不起作用的任何想法?

回答

4

我在這裏找到了答案:

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

「Kerberos不以負載均衡架構工作,IIS回落到NTLM身份驗證,因爲你不能使用NTLM進行。委派,任何需要授權的應用程序或服務都不起作用。有關更多信息,請單擊下面的文章編號,以查看Microsoft「

中的文章。 t就是這樣。我現在試着用另一臺不負載平衡的機器,它可以工作。

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

2

在你的web.config設置<identity impersonate="true"/>後嘗試以下操作:

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

隨着'<身份冒充=「真」 />'我的應用程序作爲該用戶所有的時間。我不能允許。該Web應用程序需要作爲自定義域帳戶運行,並且已經爲此配置。只有這一行代碼需要以當前登錄用戶的身份訪問網絡資源,而不是作爲運行該應用程序的自定義域帳戶。我在這裏還是錯過了一些東西?我目前正在尋找協議轉換(http://msdn.microsoft.com/en-us/library/ms998355.aspx)我認爲這適用於我的情況。你可否確認? –

+0

我必須使用impersonate =「true」,否則我得到ImpersonationLevel'Identify'。所以我使用它與我想要運行該應用程序的DOMAIN \ USER的用戶名和密碼。 –

1

,你需要正確地配置您的網站在IIS中的模擬工作。

看到Configure ASP.NET Impersonation Authentication (IIS 7)

+0

我有IIS6。但無論如何,這隻能配置web.config。我不要那個。我的應用程序需要以DOMAIN \ USER的身份運行,並且只有我的應用程序中的某些內部資源請求必須以登錄的用戶身份完成。我得到了WindowsIdentity並且調用了Impersonate(),但是在CredentialCache中沒有憑據(它們都是空的......) –

+0

我提出了兩個答案,因爲它們包含需要完成的部分配置。在我的情況下,問題是負載平衡器... –

相關問題