2013-11-28 78 views
2

我已經運行到wierdest問題,我希望一些ASP.NET專家能給我一些線索,這是怎麼回事。集成Windows身份驗證打破File.Exists

我有一個運行在IIS 6.0上的ASP.NET網站。在它上面,我有一個.asmx web服務。在.asmx web服務中,我使用System.IO.File.Exists()來檢查網絡共享上是否存在文件。該網站使用模擬。

這裏有大量的踢球者:如果我設置IIS運行使用基本身份驗證的網站,該File.Exists行返回True。如果我將它設置爲集成Windows身份驗證,它將返回False。我沒有改變任何東西,我可以來回改變,併發生完全相同的事情。我記錄電話之前的一些信息File.Exists()而事實上,無論是User.Identity.NameSystem.Security.Principal.WindowsIdentity.GetCurrent().Name返回完全相同的名稱,無論設置(我自己的帳戶,這顯然有獲得我正在尋找的文件)。

我會後的事情我做過嘗試,但老實說,你能在這種情況下,其中一個設置不應該影響這個問題的問題嘗試。我試圖關閉模擬,並且這也使得File.Exists()調用返回True(由於我自己的用戶具有遠高於運行appPool的帳戶的權限,因此我的思想開始流失)。

任何想法,我可以研究解決這個問題?

回答

4

確定發生了什麼事是服務器不能委託的身份驗證。也就是說,它不能代表用戶向另一臺服務器行事,而只能向其自身行事。

代表團不是基本身份驗證的一個問題,因爲服務器知道你的密碼(因爲你告訴它作爲基本身份驗證的一部分),所以它可以在遠程計算機進行認證。

如果您處於Active Directory/Kerberos環境中,則必須將服務器配置爲受委託代理。我從來沒有這樣做過,所以我不確定如何,但這是一個配置問題,而不是編程問題。根據您的配置,您可能必須配置服務器計算機帳戶或IIS身份或兩者。

在這裏看到一些參考:

如果在Kerberos環境中,您必須使用基本身份驗證,或者從一些用戶那裏得到的密碼其他方式,並自己撥打LogonUser來冒充用戶。如果使用基本身份驗證或以任何其他方式使用明文密碼,則當然必須使用HTTPS/TLS以確保安全。

+0

不幸的是,我不能設置這種代表團,因此我們必須使用基本身份驗證,至少不會解決問題File.Exists運行。不幸的是,後臺問題是我無法在其他服務器(具有文件共享的相同服務器)上調用Web服務,因爲我獲得了401未授權。不幸的是,基本身份驗證並不能解決這個問題,即使它看起來也像委託問題一樣。 – Tobberoth

+0

沒有Kerberos委託,您無法將您的憑據傳遞給另一臺IIS服務器。這是IIS的侷限性,也稱爲雙跳問題。 – NoviceProgrammer

+0

@tobberoth,您可以在基本身份驗證會話中找到密碼,因爲它是會話變量之一。這應該使您能夠設置顯式的基本認證連接到其他Web服務。 – Ben