資訊: ASP.NET 安全性概觀

文章翻譯 文章翻譯
文章編號: 306590 - 檢視此文章適用的產品。
本文參照下列的 Microsoft.net架構類別庫的命名空間:
  • System.Web.Security
  • System.Web.Principal
全部展開 | 全部摺疊

在此頁中

結論

這篇文章提供 ASP.NET 的簡介安全性。

有關其他 ASP.NET 的概觀,請參閱下列微軟知識庫文件:
305140 資訊: ASP.NET 藍圖

其他相關資訊

ASP.NET 可讓您更能夠控制如何執行安全性您的應用程式。ASP.NET 安全性的運作方式與 Microsoft Internet Information Services 一起使用(IIS) 的安全性,並且包含驗證和授權服務實作 ASP.NET 的安全性模型。ASP.NET 也會包含以角色為基礎您可以在實作這兩種 Microsoft Windows 的安全性功能,非 Windows 使用者帳戶。

這份文件分為下列區段:

安全性與要求的流程

下列步驟概述當用戶端的事件順序提出要求時:
  1. 在用戶端要求.aspx 網頁所在的 iis伺服器。
  2. 用戶端的認證會傳遞至 IIS。
  3. IIS 會驗證用戶端,並將已驗證轉送語彙基元,以及 ASP.NET 背景工作處理序的用戶端的要求。
  4. 根據從 IIS 驗證過的權杖,Web 應用程式的組態設定,ASP.NET 會決定是否要模擬使用者,以處理此要求的執行緒上。在特殊的Microsoft 動態伺服器網頁 (ASP) 和 ASP.NET,ASP.NET 差異沒有預設情況下,會再模擬已驗證的使用者。若要啟用模擬,您必須設定 [識別] 區段的模擬屬性設為 true的 Web.config 檔案中。
如需有關安全性流程的詳細資訊,請參閱下列主題中.NET Framework 軟體開發套件 (SDK)文件:
ASP.NET 的資料流程
http://msdn.microsoft.com/en-us/library/xa68twcb (vs.71).aspx
如需詳細資訊模擬在 ASP.NET 中,按一下 [文件編號,檢視中的文件「 Microsoft 知識庫 」:
306158 資訊: ASP.NET 應用程式中實作模擬

相關的組態設定

IIS 會維持在 IIS 中的安全性相關的組態設定中繼庫。不過,ASP.NET 維護安全性 (及其他) 組態「 可延伸標記語言 (XML) 的組態檔中的設定。雖然這通常可以簡化從安全性的應用程式的部署,觀點來看,您的應用程式會採用的安全性模型必須在 IIS metabase 和 ASP.NET 應用程式的正確設定透過這項組態檔 (Web.config)。

下列ASP.NET 安全性相關設定區段:

驗證

驗證是指您取得識別的程序使用者名稱和密碼等認證和驗證這些認證對於某些權限。

ASP.NET 提供四種的驗證提供者:

表單驗證

表單驗證是指系統在其未經驗證的認證要求重新導向至您的 「 超文字標記語言 (HTML) 表單使用者輸入他們的認證。在使用者提供認證並送出在表單中,應用程式驗證要求,以及系統問題授權票證 cookie 的形式。這個 cookie 會包含憑證或是金鑰來重新取得識別碼。接下來的要求,從瀏覽器會自動包含這個 cookie。

如需相關資訊表單驗證,請參閱.NET Framework SDK 中的下列主題文件:
表單驗證提供者
http://msdn.microsoft.com/en-us/library/907hb5w9 (vs.71).aspx
針對詳細資訊表單驗證,在 ASP.NET 中,按一下文件編號,檢視 「 Microsoft 知識庫 」 中的文的文件:
301240 HOW TO: 實作表單型驗證中使用 C#.net ASP.NET 應用程式

Windows 驗證

在 [Windows 驗證,IIS 不會執行驗證,以及驗證過的權杖會轉送到 ASP.NET 的背景工作處理序。使用 Windows 的優點驗證是它需要最少的程式碼撰寫。您可以使用視窗若要模擬 IIS 驗證的 Windows 使用者帳戶的驗證之前您送交 ASP.NET 的要求。

如需詳細資訊關於 Windows 驗證,請參閱.net 中的下列主題Framework SDK 文件:
WindowsAuthenticationModule 提供者
http://msdn.microsoft.com/en-us/library/907hb5w9 (vs.71).aspx

Passport 驗證

Passport 驗證是一個集中式的驗證服務,Microsoft 提供的提供單一登入和核心設定檔服務為成員站台。當您需要,一般而言,使用 Passport 驗證單一登入跨越多重網域的功能]。

如需詳細資訊Passport 驗證的相關資訊,請參閱下列主題中.NET Framework SDK 文件:
Passport 驗證提供者
http://msdn.microsoft.com/en-us/library/f8e50t0f (vs.71).aspx

預設驗證

預設值用在不想讓任何安全性在您的 Web 應用程式 ;匿名存取是這個安全性的需求提供者。在所有的驗證提供者,預設驗證所提供您的應用程式的最大效能。這個驗證提供者也是當您使用自己的自訂安全性模式時,就會使用。

授權

授權是如果驗證程序已驗證使用者可以存取要求的資源。

ASP.NET 提供下列的授權提供者:

FileAuthorization

FileAuthorizationModule類別的執行檔案授權,並為作用中,當您使用Windows 驗證。FileAuthorizationModule會負責執行檢查 Windows 介紹存取控制若要判斷使用者是否可以存取清單 (Acl)。

UrlAuthorization

UrlAuthorizationModule類別會執行的統一資源定位器 (URL) 的授權這會控制 URI 命名空間為基礎的授權。URI 命名空間可能但是迴異於實體的資料夾和檔案路徑的 NTFS 權限使用。

UrlAuthorizationModule會實作這兩個正與負的授權判斷提示中。也就是說,您可以使用模組,以選擇允許或拒絕存取對於使用者而言,角色 (例如 [管理員] 中,URI 命名空間的任意部分軟體測試人員和系統管理員) 以及動詞命令 (例如,GET 或 POST)。

針對需有關授權中 ASP.NET,請參閱下列主題.NET Framework SDK 文件中:
ASP.NET 授權
http://msdn.microsoft.com/en-us/library/wce3kxhd (vs.71).aspx

以角色為基礎的安全性

以角色為基礎的安全性,在 ASP.NET 很類似角色為基礎Microsoft COM + 和 Microsoft 交易伺服器 (MTS) 使用的安全性雖然有重大的差異。不是在 ASP.NET 中的角色架構安全性限制為 Windows 帳戶及群組。比方說,如果 Windows 驗證啟用模擬時,使用者的識別為 Windows 識別(User.Identity.Name ="網域 \ 使用者名稱 」)。您可以檢查識別碼特定角色的成員資格,並據此限制存取。針對範例:

Visual Basic 的.net 程式碼
If User.IsInRole("BUILTIN\Administrators") Then
   Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
   Response.Write("You are a User")
Else
   Response.Write("Invalid user")
End if
				
視覺化 C#.net 程式碼
if ( User.IsInRole("BUILTIN\\Administrators"))
   Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
   Response.Write("You are a User");
else
   Response.Write("Invalid user");
				
如果您使用表單驗證,並不為指派角色已驗證的使用者資訊。您必須以程式設計的方式進行。若要指派給角色驗證使用者,使用的驗證模組 (也就是表單的OnAuthenticate事件在本例中的驗證模組) 以建立新的GenericPrincipal物件,並將它指派給 HttpContext 的使用者屬性。下列程式碼說明這樣:

Visual Basic 的.net 程式碼
Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
   If (Not(HttpContext.Current.User Is Nothing)) Then
      If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
         Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
         Dim myRoles(3) As String
         myRoles(0)= "managers"
         myRoles(1)= "testers"
         myRoles(2)= "developers"
         HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles) 
      End If
   End If
End Sub
				
視覺化 C#.net 程式碼
public void Application_AuthenticateRequest(Object s, EventArgs e)      
{
   if (HttpContext.Current.User != null)
   {
      if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" ) 
      {
         System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
         String[] myRoles = new String[3];
         myRoles[0]= "managers";
         myRoles[1]= "testers";
         myRoles[2]= "developers";
         HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
      }
   }
} 
				
若要檢查使用者是否具有特定角色,並限制存取因此,使用下列程式碼 (或同類).aspx 網頁中:

Visual Basic 的.net 程式碼
If User.IsInRole("managers") Then
   Response.Write("You are a Manager")
Else If  User.IsInRole("testers") Then
   Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
   Response.Write("You are a Developer")
End if
				
視覺化 C#.net 程式碼
if (User.IsInRole("managers"))
   Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
   Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
   Response.Write("You are a Developer");
				
如需詳細資訊,請按一下文件編號,檢視 「 Microsoft 知識庫 」 中的文的文件:
306238 HOW TO: 實作以角色為基礎與表單基礎的驗證,藉由使用 Visual Basic 的.net 應用程式 ASP.NET 中的安全性
如需有關角色架構安全性的詳細資訊,請參閱.NET Framework SDK 文件中的下列主題:
以角色為基礎的安全性
http://msdn.microsoft.com/en-us/library/52kd59t0 (vs.71).aspx

?考

ASP.NET 安全性指導方針的資訊,請參閱下列 MSDN 白皮書:
ASP.NET 中的驗證:.net 安全性指南
http://msdn.microsoft.com/en-us/library/ms978378.aspx
一般 ASP.NET 的詳細資訊,請參閱下列的 MSDN 新聞群組:
microsoft.public.dotnet.framework.aspnet
如需詳細資訊,請按一下文件編號,檢視 「 Microsoft 知識庫 」 中的文的文件:
311094 錯誤: 「 ConfigurationException 」 錯誤訊息時要模擬的帳戶讀取設定
306359 在 ASP.NET 的 PRB: Request.ServerVariables("LOGON_USER") 傳回空字串
313091 HOW TO: 使用 Visual Basic 的.net 使用於表單驗證來建立機碼
313116 PRB: 表單驗證要求沒有連到 loginUrl 頁面
如需詳細資訊,請參閱以下書籍:
Reilly,只有 J. 設計 Microsoft ASP.NET 應用程式.微軟出版品,2001年。

Esposito,與會議發表演說。ASP.NET 及 ADO.NET 建置 Web 解決方案.微軟出版品,2001年。

屬性

文章編號: 306590 - 上次校閱: 2012年6月28日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
關鍵字:?
kbproductlink kbarttyperoadmap kbconfig kbinfo kbsecurity kbweb kbmt KB306590 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:306590
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com