簡體   English   中英

集成的Windows身份驗證破壞了File.Exists

[英]Integrated Windows Authentication breaks File.Exists

我遇到了最棘手的問題,我希望一些ASP.NET專家可以為我提供一些有關發生情況的線索。

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

這是一個很大的步驟:如果我將IIS設置為使用基本身份驗證運行站點,則File.Exists行將返回True。 如果將其設置為Integrated Windows Authentication,它將返回False。 我什么都沒改變,我可以來回改變,完全一樣的事情發生了。 我在調用File.Exists()之前記錄了一些信息,事實上,無論設置如何, User.Identity.NameSystem.Security.Principal.WindowsIdentity.GetCurrent().Name返回完全相同的名稱(我自己的帳戶顯然可以訪問我要查找的文件)。

我會發布我已經嘗試過的東西,但老實說,在這種情況下,您應該嘗試什么?在這種情況下,一個不應該影響問題的設置就是問題。 我嘗試關閉模擬,這也使File.Exists()調用返回True(這讓我很File.Exists() ,因為我自己的用戶比運行appPool的帳戶具有更高的權限)。

我有什么想法可以解決這個問題?

好的,這是服務器無法委派身份驗證。 也就是說,它不能代表用戶對另一台服務器采取行動,只能對自身采取行動。

對於基本身份驗證來說,委派不是問題,因為服務器知道您的密碼(因為您是在基本身份驗證中告訴您的),因此它可以對遠程計算機執行身份驗證。

如果您處於Active Directory / Kerberos環境中,則必須將服務器配置為受信任的委派 我從來不需要這樣做,所以我不確定具體如何做,但這是配置問題,而不是編程問題。 根據您的配置,您可能必須配置服務器計算機帳戶或IIS身份或同時配置兩者。

請參閱此處以獲得一些參考:

如果您不在 Kerberos環境中,則必須使用基本身份驗證,或以其他方式從用戶那里獲得密碼,然后自己調用LogonUser來模擬用戶。 如果使用基本身份驗證或以任何其他方式使用明文密碼,則您當然必須使用HTTPS / TLS進行安全保護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM