ASP.NET 模擬
更新:2007 年 11 月
使用模擬時,可以用提出要求之使用者的 Windows 識別 (使用者帳戶) 執行 ASP.NET 應用程式。模擬通常用於依賴 Microsoft Internet Information Services (IIS) 的應用程式中,以驗證使用者。
ASP.NET 模擬預設為停用。如果在 ASP.NET 應用程式中啟用模擬,該應用程式會在 IIS 將其存取語彙基元 (Token) 傳遞至 ASP.NET 的識別內容中執行。這個語彙基元可以是已驗證使用者的語彙基元,例如登入 Windows 之使用者的語彙基元,或是 IIS 為匿名使用者 (通常是 IUSR_MACHINENAME 識別) 所提供的語彙基元。
啟用模擬時,只有應用程式程式碼會在模擬的使用者內容下執行。編譯應用程式和載入組態資訊則是利用 ASP.NET 處理序 (Process) 的識別來進行。如需詳細資訊,請參閱設定 ASP.NET 處理序識別。編譯的應用程式會放在暫存 ASP.NET 檔案目錄中。正在模擬的應用程式識別必須具有這個目錄的讀取/寫入存取權限。模擬的應用程式識別至少也需要有應用程式目錄和子目錄中檔案讀取的存取權限。如需詳細資訊,請參閱 ASP.NET 所需的存取控制清單 (ACL)。
注意事項: |
---|
因為在編譯應用程式和載入組態資訊時,ASP.NET 會使用 ASP.NET 處理序的 Windows 識別,所以您必須使應用程式程式碼和組態資訊在裝載多個應用程式之伺服器上的應用程式間保持私密。在 Windows Server 2003 上,您可以建立多個應用程式集區並指定每個應用程式集區的唯一識別。然後,使用存取控制清單 (ACL) (如果是使用 NTFS 格式化的檔案系統) 和這些識別,限制應用程式檔案的存取權限。例如,考量兩個應用程式 App1 和 App2,其中每個應用程式中的資訊都必須保持私密。您可以將 App1 放在 ApplicationPool1 應用程式集區中,它的識別為 ID_ApplicationPool1。將 App2 放在 ApplicationPool2 應用程式集區中,它的識別為 ID_ApplicationPool2。ID_ApplicationPool1 帳戶能夠存取 App1 中的檔案,但是無法存取 App2 中的檔案。ID_ApplicationPool2 能夠存取 App2 中的檔案,但是無法存取 App1 中的檔案。請注意,因為在這些作業系統上,所有 ASP.NET 應用程式的處理序識別是單一識別,所以您無法在 Windows 2000 或 Windows XP Professional 上做這種區別。 |
您會使用 identity 組態項目控制模擬。而在使用其他組態指示詞的情況下,這個指示詞會在階層上套用。以下範例為啟用應用程式模擬作業所需的最小組態檔:
<configuration>
<system.web>
<identity impersonate="true"/>
</system.web>
</configuration>
您也可以加入特定名稱的支援,將應用程式當做可設定的識別執行,如以下範例所示:
<identity impersonate="true"
userName="contoso\Jane"
password="********" />
將上一個範例中所列的值取代為正確的密碼。
注意事項: |
---|
在之前的範例中,使用者名稱和密碼都會儲存在組態檔的純文字中。若要改善應用程式的安全性,建議您使用存取控制清單 (ACL) 限制 Web.config 檔案的存取權限,並使用受保護的組態加密 Web.config 檔案中的 identity 組態項目。如需詳細資訊,請參閱使用受保護的組態加密組態資訊。 |
不論要求的識別為何,範例中所說明的組態能夠讓整個應用程式使用 contoso\Jane 識別來執行。這類模擬可以委派至另一台電腦。也就是說,若您指定模擬使用者的使用者名稱和密碼,則可以使用整合式安全性連接至網路上的另一台電腦和要求資源,例如 SQL Server 的檔案或存取權限。如果啟用模擬且未將網域帳戶指定為識別,除非 IIS 應用程式已設定為使用基本驗證,否則將無法連接至網路上的另一台電腦。
注意事項: |
---|
在 Windows 2000 上,您無法使用特定的使用者認證,模擬 ASP.NET 背景工作處理序的識別。但是,可以在沒有特定使用者認證的情況下啟用模擬,讓應用程式模擬 IIS 所決定的識別。如需詳細資訊,請參閱 Microsoft 知識庫 (網址為 https://support.microsoft.com) 中的文件 810204 <PRB: Per Request Impersonation Does Not Work on Windows 2000 with ASP.NET>。 |
讀取模擬的識別
下列程式碼範例會顯示如何以程式設計方式讀取模擬使用者的識別:
Dim username As String = _
System.Security.Principal.WindowsIdentity.GetCurrent().Name
String username =
System.Security.Principal.WindowsIdentity.GetCurrent().Name;