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 檔案有三個主要的子區段:authenticationauthorizationidentity 區段。每個安全性項目的值通常都會設定於 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"/>

最低信任層級的預設原則檔。

請參閱

概念

ASP.NET 組態概觀

其他資源

保護 ASP.NET 網站

重要的安全性概念

表單驗證提供者