ASP.NET 安全性架構
更新:2007 年 11 月
本節提供 ASP.NET 安全性基礎結構的概觀。下圖將說明 ASP.NET 中安全性系統之間的關聯性。
ASP.NET 架構
如上圖所示,所有 Web 用戶端都是透過 Microsoft Internet Information Services (IIS) 與 ASP.NET 應用程式通訊。IIS 會視需要驗證要求,然後找出所要求的資源 (例如 ASP.NET 應用程式)。如果用戶端已獲得授權,即可使用資源。
當 ASP.NET 應用程式在執行時,可以使用內建的 ASP.NET 安全性功能。此外,ASP.NET 應用程式可以使用 .NET Framework 的安全性功能。如需詳細資訊,請參閱重要的安全性概念。
整合 ASP.NET 驗證與 IIS
除了依賴 IIS 的驗證功能以外,還可以在 ASP.NET 中執行驗證。在考慮進行 ASP.NET 驗證時,您應該了解與 IIS 驗證服務的互動。
IIS 假設有一組認證會對應至 Microsoft Windows NT 帳戶,並且應該使用這些認證來驗證使用者。在 IIS 5.0 與 IIS 6.0 中有三種不同的驗證方式:基本、摘要式和 Windows 整合式安全性 (NTLM 或 Kerberos)。您可以在 IIS 管理服務中選取要使用的驗證類型。如需 IIS 驗證的詳細資訊,請參閱 IIS 說明文件。
如果使用者要求對應至 ASP.NET 應用程式的 URL,則要求和驗證資訊都會傳送給該應用程式。ASP.NET 會提供表單驗證。表單驗證是將未經驗證的要求重新導向至您建立的 ASP.NET 網頁之系統。使用者會提供認證並送出該頁面。如果應用程式驗證該要求,系統便會發出一份在 Cookie 中含有認證或金鑰 (Key) 的驗證票證,重新取得識別 (Identity)。後續的要求包括具有要求的驗證票證。
注意事項: |
---|
ASP.NET 成員資格和 ASP.NET 登入控制項會隱含地使用表單驗證。 |
ASP.NET 組態檔案安全性設定
ASP.NET 安全性設定是設定於 Machine.config 和 Web.config 檔案中。至於其他的組態資訊,基本設定和預設設定都會建立在目前 .NET Framework 安裝版本之 Config 子目錄的 Machine.config 檔案中。您可以在網站根目錄和應用程式根目錄內的 Web.config 檔案中,建立網站專屬和應用程式專屬的設定 (包含覆寫 Machine.config 檔案中的設定)。除了由子目錄的 Web.config 檔案覆寫外,子目錄將繼承目錄的設定。若要查看階層式組態系統的安全性作業範例,請參閱 configSections 項目 (一般設定結構描述)。
Web.config 檔案有三個主要的子區段:authentication、authorization 和 identity 區段。每個安全性項目的值通常都會設定於 Machine.config 檔案中,並視需要在應用程式層級的 Web.config 檔案中加以覆寫。所有子目錄都將自動繼承這些設定。然而,子目錄仍然可以擁有自己的組態檔案,以覆寫繼承的設定。
注意事項: |
---|
ASP.NET 組態只會套用至 ASP.NET 資源,也就是那些登錄為由 Aspnet_isapi.dll 擴充程式在 IIS 中處理的資源。ASP.NET 組態無法對 ASP.NET 尚未處理的資源提供授權。因此,所有使用者都可以存取 .txt、.htm、.html、.gif、.jpg、.jpeg、.asp 和其他類型的檔案 (依照 IIS 使用權限而定)。例如,即使目錄中的 ASP.NET 資源可能會受到 Web.config 檔案的限制,如果已啟動目錄瀏覽且沒有其他的限制條件,則所有使用者仍可以檢視該目錄中的檔案。您可以將這些類型的檔案置於 ASP.NET 安全性之下,其做法便是使用 IIS 管理工具,將此類副檔名對應至 Aspnet_isapi.dll 擴充程式。不過,透過 ASP.NET 處理這些類型的檔案可能會影響網站的效能。 |
您可以使用 location 組態項目,指定應套用設定的特定檔案或目錄。如需詳細資訊,請參閱 configSections 項目 (一般設定結構描述)和設定特定的檔案和子目錄。如需 ASP.NET 組態的詳細資訊,請參閱 ASP.NET 組態概觀。
下列範例會顯示組態檔案之安全性區段的語法:
<authentication mode="[Windows|Forms| None]">
<forms name="name"
loginUrl="url"
protection="[All|None|Encryption|Validation]"
path="path" timeout="minutes"
requireSSL="[true|false]"
slidingExpiration="[true|false]">
<credentials passwordFormat="[Clear|MD5|SHA1]">
<user name="********"
password="********"/>
</credentials>
</forms>
</authentication>
<authorization>
<allow users="comma-separated list of users"
roles="comma-separated list of roles" />
<deny users="comma-separated list of users"
roles="comma-separated list of roles" />
</authorization>
<identity impersonate ="[true|false]"
userName="domain\username"
password="password" />
<trust level="[Full|High|Medium|Low|Minimal]"
originUrl=""/>
<securityPolicy>
<trustLevel name="Full" policyFile="internal"/>
<trustLevel name="High" policyFile="web_hightrust.config"/>
<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
<trustLevel name="Low" policyFile="web_lowtrust.config"/>
<trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
</securityPolicy>
這些項目的預設值如以下表格所示。
預設值 |
說明 |
---|---|
<allow roles="" /> |
表示依照預設會允許所有角色的空字串。 |
<allow users="*" /> |
表示允許所有使用者存取 (不需要驗證) 的空字串。 |
<authentication mode="Windows" /> |
會決定目前 User 值之來源的驗證類型。預設為 Windows。 |
<credentials passwordFormat="SHA1" /> |
用於密碼的雜湊演算法。預設值為 SHA1。 |
<deny roles="" /> |
表示依照預設不會拒絕任何角色的空字串。 |
<deny users="" /> |
表示依照預設不會拒絕任何使用者的空字串。 |
<forms loginUrl="logon.aspx" /> |
如果您將驗證 mode 設定為 Forms,且要求不具有效的驗證票證時,要求所導向的 URL。 |
<forms name=".ASPXAUTH" /> |
表單驗證 Cookie 用於儲存在使用者電腦上的名稱。 |
<forms path="/" /> |
表單驗證所套用至的路徑。預設值為應用程式根目錄下的所有路徑。 |
<forms protection="All" /> |
套用至表單驗證票證的安全性。包括下列值:All、None、Encryption 和 Validation。 |
<forms timeout="30" /> |
在表單驗證票證到期且使用者必須重新驗證前的逾時 (以分鐘為單位)。 |
<forms requireSSL="false" /> |
指出傳輸驗證 Cookie 是否需要 SSL 連接的布林值。 |
<forms slidingExpiration="true" /> |
指出是否啟用滑動期限 (Sliding Expiration) 的布林值。如需詳細資訊,請參閱 SlidingExpiration 屬性。 |
<identity impersonate="false" /> |
指出是否停用模擬作業的布林值。如需詳細資訊,請參閱 ASP.NET 模擬。 |
<identity userName="" /> |
表示依照預設不會指定任何使用者識別的空字串。 |
<identity password="" /> |
表示依照預設不會指定任何使用者識別密碼的空字串。 |
<trust level="Full" originUrl="" /> |
將套用至應用程式的安全性原則。 |
<trustLevel name="Full" policyFile="internal"/> |
完全信任層級的預設原則檔。 |
<trustLevel name="High" policyFile="web_hightrust.config"/> |
高度信任層級的預設原則檔。 |
<trustLevel name="Medium" policyFile="web_mediumtrust.config"/> |
中度信任層級的預設原則檔。 |
<trustLevel name="Low" policyFile="web_lowtrust.config"/> |
低度信任層級的預設原則檔。 |
<trustLevel name="Minimal" policyFile="web_minimaltrust.config"/> |
最低信任層級的預設原則檔。 |