我們很難判斷這些憑證對象是如何工作的。事實上,他們可能無法工作,我們預計他們如何工作。這是對當前問題的解釋。使用DefaultCredentials和DefaultNetworkCredentials
我們有2臺服務器需要通過webservices彼此交談。第一個(我們稱之爲Server01
)具有作爲NetworkService帳戶運行的Windows服務。另一個Server02
具有與IIS 6.0一起運行的ReportingServices。 Server01
上的Windows服務試圖使用ReportingServices WebService生成報告並通過電子郵件發送。
所以,這是我們到目前爲止所嘗試的。
在運行時設置的憑據(這工作完全正常):
rs.Credentials = new NetworkCredentials("user", "pass", "domain");
現在,如果我們可以使用一個通用的用戶都將被罰款,但是......我們不允許。所以,我們試圖利用DefaultCredetials或DefaultNetworkCredentials並把它傳遞到RS web服務:
rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
或者:
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
無論哪種方式將無法正常工作。我們總是從IIS獲取401 Unautrorized。現在,我們知道的是,如果我們想給訪問記錄爲網絡服務資源,我們需要將它授予DOMAIN\MachineName$
(http://msdn.microsoft.com/en-us/library/ms998320.aspx):
授予訪問遠程SQL Server
如果您正在訪問同一域(或受信任域中)的另一臺服務器上的數據庫時,網絡服務帳戶的網絡憑據將用於向數據庫進行身份驗證。網絡服務帳戶的憑證格式爲DomainName \ AspNetServer $,其中DomainName是ASP.NET服務器的域,AspNetServer是您的Web服務器名稱。
例如,如果您的ASP.NET應用程序在域CONTOSO中名爲SVR1的服務器上運行,則SQL Server會看到來自CONTOSO \ SVR1 $的數據庫訪問請求。
我們假設以與IIS相同的方式授予訪問權限可行。但是,它沒有。或者至少,有些東西沒有正確設置以便正確認證。
因此,這裏有一些問題:
我們讀過有關「冒充用戶」的地方,我們需要設置這個地方在Windows服務?
是否可以將對NetworkService內置帳戶的訪問權授予遠程IIS服務器?
感謝您的閱讀!
優秀的鏈接:D – omglolbah 2010-04-19 09:14:26