ASP .NET 中的身份驗(yàn)證:.NET 安全性指導(dǎo)
發(fā)布時(shí)間:2008-06-08 閱讀數(shù): 次 來(lái)源:網(wǎng)樂(lè)原科技
摘要
本文討論了設(shè)計(jì)服務(wù)器應(yīng)用程序時(shí)考慮安全性的重要性。Internet Information Services 和 ASP .NET 均提供了安全模型,以便您對(duì)用戶進(jìn)行適當(dāng)?shù)纳矸蒡?yàn)證,并在應(yīng)用程序中獲得正確的安全環(huán)境。
--------------------------------------------------------------------------------
目錄
簡(jiǎn)介
安全性考慮
IIS 和 ASP .NET 之間的關(guān)系
身份驗(yàn)證方法
Web 服務(wù)的安全性
代碼訪問(wèn)安全性
通道安全性
其他信息
附錄 A
--------------------------------------------------------------------------------
簡(jiǎn)介
不論對(duì)應(yīng)用程序設(shè)計(jì)者還是開(kāi)發(fā)人員,安全性都是關(guān)注的主要問(wèn)題。您需要保護(hù)存儲(chǔ)敏感信息的應(yīng)用程序,既要防止惡意攻擊,又要防止競(jìng)爭(zhēng)對(duì)手竊取信息或知識(shí)產(chǎn)權(quán)。在為您的應(yīng)用程序設(shè)計(jì)安全模型時(shí),您需要從業(yè)務(wù)角度了解安全要求,以及選定的安全模型在性能、可伸縮性和部署上所具有的含義。
--------------------------------------------------------------------------------
安全性考慮
如果您在設(shè)計(jì)服務(wù)器應(yīng)用程序,那么您的設(shè)計(jì)規(guī)范應(yīng)包含一個(gè)解決安全問(wèn)題的部分。在應(yīng)用程序的功能規(guī)范中,您應(yīng)當(dāng)考慮以下項(xiàng)目并盡可能給出解決方案:
安全目標(biāo)。理解您要保護(hù)的對(duì)象并確保您可以說(shuō)明它。
安全風(fēng)險(xiǎn)。理解您的應(yīng)用程序的弱點(diǎn)。您還必須理解這些弱點(diǎn)對(duì)業(yè)務(wù)的潛在危害程度。
身份驗(yàn)證。這一過(guò)程接受用戶憑據(jù),并根據(jù)指定的頒發(fā)機(jī)構(gòu)來(lái)驗(yàn)證憑據(jù)。用戶的(或者潛在的應(yīng)用程序或計(jì)算機(jī)的)標(biāo)識(shí)被稱為安全當(dāng)事者。客戶端必須提供憑據(jù),以便服務(wù)器驗(yàn)證當(dāng)事者的標(biāo)識(shí)。確認(rèn)標(biāo)識(shí)后,應(yīng)用程序就能授權(quán)當(dāng)事者訪問(wèn)系統(tǒng)資源。本文檔的下一節(jié)將講述各種標(biāo)準(zhǔn),它們有助于您選擇恰當(dāng)?shù)纳矸蒡?yàn)證機(jī)制。
權(quán)限。這一過(guò)程確定已證實(shí)的標(biāo)識(shí)是否可以訪問(wèn)某一特定資源。
保護(hù)數(shù)據(jù)傳輸。在數(shù)據(jù)通過(guò)網(wǎng)絡(luò)時(shí)對(duì)數(shù)據(jù)進(jìn)行加密,可以確保數(shù)據(jù)在傳輸過(guò)程中不被查看和修改。您必須考慮傳輸過(guò)程中需要的數(shù)據(jù)加密級(jí)別。
模擬。這一機(jī)制允許服務(wù)器進(jìn)程使用客戶端的安全憑據(jù)來(lái)運(yùn)行。當(dāng)服務(wù)器模擬客戶端時(shí),服務(wù)器的所有操作均使用客戶端的憑據(jù)進(jìn)行。模擬不允許服務(wù)器代表客戶端訪問(wèn)遠(yuǎn)程資源。該操作需要使用代理。
代理。和模擬一樣,代理允許服務(wù)器進(jìn)程使用客戶端的安全憑據(jù)來(lái)運(yùn)行。但是,代理的功能更加強(qiáng)大,它允許服務(wù)器進(jìn)程以客戶端方式來(lái)呼叫其他計(jì)算機(jī)。
操作系統(tǒng)安全性。它指建立適當(dāng)?shù)脑L問(wèn)控制列表 (Access Control List, ACL) 和網(wǎng)絡(luò)安全措施,以防止入侵者訪問(wèn)受保護(hù)的資源。您必須為適當(dāng)?shù)馁Y源設(shè)置適當(dāng)?shù)?ACL,從而只允許相關(guān)的當(dāng)事者進(jìn)行訪問(wèn)。
保護(hù)物理訪問(wèn)。是指將您的服務(wù)器計(jì)算機(jī)放在一個(gè)安全的房間中。您不應(yīng)忽視這個(gè)基本問(wèn)題。
代碼訪問(wèn)安全性。它允許根據(jù)代碼的來(lái)源及代碼標(biāo)識(shí)的其他特征來(lái)確定代碼的可信度。您應(yīng)當(dāng)了解如何創(chuàng)建自己的訪問(wèn)許可。
--------------------------------------------------------------------------------
IIS 和 ASP .NET 之間的關(guān)系
在設(shè)計(jì)應(yīng)用程序時(shí),您應(yīng)理解 Internet Information Services (IIS) 身份驗(yàn)證和 Microsoft ASP .NET 安全結(jié)構(gòu)之間的關(guān)系。這將允許您恰當(dāng)?shù)仳?yàn)證您的用戶,并在應(yīng)用程序中獲得正確的安全環(huán)境。請(qǐng)注意,ASP .NET 應(yīng)用程序的安全配置和 IIS 的安全配置是完全獨(dú)立的,它們可以單獨(dú)使用,也可以結(jié)合使用。
IIS 在 IIS 元數(shù)據(jù)庫(kù)中維護(hù)與安全性相關(guān)的配置設(shè)置,而 ASP .NET 在 XML 配置文件中維護(hù)安全(或其他)配置設(shè)置。這一般會(huì)在安全性方面簡(jiǎn)化應(yīng)用程序的部署,但應(yīng)用程序采用的安全模型則需要通過(guò)配置文件 (Web.config) 正確配置 IIS 元數(shù)據(jù)庫(kù)和您的 ASP .NET 應(yīng)用程序。
圖 1 說(shuō)明了 IIS 和 ASP .NET 之間的關(guān)系。
圖 1:IIS 和 ASP .NET 之間的安全性關(guān)系
ASP .NET 身份驗(yàn)證提供程序和 IIS 安全性
ASP .NET 通過(guò)使用身份驗(yàn)證提供程序來(lái)實(shí)現(xiàn)身份驗(yàn)證,身份驗(yàn)證提供程序是驗(yàn)證憑據(jù)和實(shí)現(xiàn)其他安全功能(例如生成 Cookie)的代碼模塊。ASP .NET 支持以下三種身份驗(yàn)證提供程序:
表單身份驗(yàn)證。使用該提供程序,可以使用客戶端重定向?qū)⑽赐ㄟ^(guò)身份驗(yàn)證的請(qǐng)求重定向到指定的 HTML 表單。然后,用戶可以提供登錄憑據(jù),并將表單發(fā)送回服務(wù)器。如果應(yīng)用程序驗(yàn)證了請(qǐng)求(使用應(yīng)用程序特定的邏輯),ASP .NET 將發(fā)出一個(gè) Cookie,其中包含憑據(jù)或用于重新申請(qǐng)客戶標(biāo)識(shí)的密鑰。后續(xù)發(fā)出的請(qǐng)求在標(biāo)頭攜帶該 Cookie,這就意味著以后不再需要身份驗(yàn)證。
Passport 身份驗(yàn)證。這是一個(gè)由 Microsoft 提供的集中身份驗(yàn)證服務(wù),它為參與的站點(diǎn)提供單一的登錄程序和成員服務(wù)。ASP .NET 與 Microsoft Passport 軟件開(kāi)發(fā)包 (SDK) 相結(jié)合,為 Passport 用戶提供了類似表單身份驗(yàn)證的功能。
Windows 身份驗(yàn)證。該提供程序利用了 IIS 的身份驗(yàn)證功能。當(dāng) IIS 完成身份驗(yàn)證后,ASP .NET 使用已驗(yàn)證標(biāo)識(shí)的標(biāo)記來(lái)授權(quán)訪問(wèn)。
要在 ASP .NET 應(yīng)用程序中使用某種指定的身份驗(yàn)證提供程序,您必須在應(yīng)用程序配置文件中創(chuàng)建如下項(xiàng):
// web.config 文件
<authentication mode = "[Windows/Cookie/Passport/None]">
</authentication>
除身份驗(yàn)證外,ASP .NET 還提供了模擬機(jī)制以建立應(yīng)用程序線程的安全標(biāo)記。能否獲得正確的標(biāo)記取決于您是否恰當(dāng)?shù)嘏渲昧?IIS 身份驗(yàn)證、ASP .NET 身份驗(yàn)證提供程序和 ASP .NET 模擬設(shè)置。圖 2 顯示了 IIS 身份驗(yàn)證和 ASP .NET 提供程序之間最可能的組合。
圖 2:ASP .NET 和 IIS 安全設(shè)置矩陣
使用 Windows 帳戶進(jìn)行身份驗(yàn)證
如果您計(jì)劃使用 Microsoft Windows NT 域控制器或 Microsoft Windows 2000 Active Directory 帳戶來(lái)進(jìn)行用戶身份驗(yàn)證,您應(yīng)當(dāng)結(jié)合使用 IIS 身份驗(yàn)證和 ASP .NET Windows 提供程序(見(jiàn)圖 2)。使用該方法,您不必編寫任何特定身份驗(yàn)證代碼。當(dāng)使用該方法驗(yàn)證時(shí),ASP .NET 根據(jù)已驗(yàn)證用戶在應(yīng)用程序環(huán)境中構(gòu)造并附加一個(gè) Windows Principal 對(duì)象。這樣,ASP .NET 線程就能夠作為已驗(yàn)證用戶運(yùn)行,并可獲得用戶的組成員身份。
在某些情況下,您可能希望忽略 IIS 身份驗(yàn)證,而實(shí)施自定義的解決方案。使用 ASP .NET 也可以實(shí)現(xiàn)這一目標(biāo)。例如,您可以編寫自定義 ISAPI 過(guò)濾器,根據(jù) Active Directory 檢查用戶憑據(jù),并手動(dòng)創(chuàng)建 Windows Principal 對(duì)象。除這種方法外,還有其他一些方法可以使用,但是與直接使用 .NET 提供程序相比,它們都需要編寫更多的代碼。
使用非 Windows 帳戶進(jìn)行身份驗(yàn)證
如果您計(jì)劃在應(yīng)用層進(jìn)行用戶身份驗(yàn)證,并且用戶沒(méi)有 Windows 帳戶,則一般應(yīng)將 IIS 配置為使用匿名驗(yàn)證。在這種配置下,請(qǐng)考慮以下 .NET 身份驗(yàn)證模塊:
無(wú):在根本不驗(yàn)證用戶時(shí)或開(kāi)發(fā)自定義驗(yàn)證代碼時(shí)使用。
表單:在需要為用戶提供登錄頁(yè)時(shí)使用。
Passport:在使用 Passport 服務(wù)時(shí)使用。
模擬和代理
在模擬情況下,ASP .NET 應(yīng)用程序能夠使用客戶端標(biāo)識(shí)以客戶端的身份有選擇地執(zhí)行。模擬一般用于資源訪問(wèn)控制。您應(yīng)仔細(xì)考慮是否需要模擬,因?yàn)樗鼘⑾念~外的服務(wù)器資源。代理是一種比模擬更強(qiáng)大的形式,它允許服務(wù)器進(jìn)程以客戶端的身份訪問(wèn)遠(yuǎn)程資源。
如果啟用模擬,ASP .NET 將從 IIS 收到模擬標(biāo)記。與傳統(tǒng)的 Active Server Pages (ASP) 相比,使用 ASP .NET 將使您在 Web 應(yīng)用程序中更廣泛地控制模擬。這種控制是通過(guò)在應(yīng)用程序的 Web.config 文件中指定值來(lái)實(shí)現(xiàn)的。
在指定所需的模擬設(shè)置時(shí),有以下三個(gè)選項(xiàng):
啟用模擬。在這種情況下,ASP .NET 將模擬由 IIS 傳遞給它的標(biāo)記,該標(biāo)記可能是已驗(yàn)證的用戶,也可能是匿名 Internet 用戶帳戶。
<identity impersonate="true"/>
啟用模擬,使用指定的特定模擬標(biāo)識(shí)。在這種情況下,ASP .NET 將模擬使用配置的標(biāo)識(shí)生成的標(biāo)記。此時(shí)不使用客戶端標(biāo)記(即使有)。
<identity impersonate="true" username="domain\user" password="pwd"/>
禁用模擬。此選項(xiàng)是默認(rèn)設(shè)置,以便與 ASP 向后兼容。在這種情況下,ASP .NET 線程將使用應(yīng)用程序輔助進(jìn)程的進(jìn)程標(biāo)記(默認(rèn)情況下為 IIS 系統(tǒng)帳戶)來(lái)運(yùn)行,而不考慮采用的是 IIS 和 ASP .NET 身份驗(yàn)證的何種組合。
<identity impersonate="false"/>
如果應(yīng)用程序駐留在 UNC 共享中,ASP .NET 將一直模擬 IIS UNC 標(biāo)記以訪問(wèn)該共享,除非使用了配置帳戶。如果提供了顯式配置的帳戶,ASP .NET 將優(yōu)先使用該帳戶。
表 1 顯示了根據(jù)三種不同的 Web.config 配置來(lái)執(zhí)行請(qǐng)求的線程標(biāo)記。請(qǐng)注意,IUSR_SERVER 帳戶表示已配置用于匿名訪問(wèn)當(dāng)前 URL 的帳戶(即,該帳戶不必是 IUSR_ 帳戶)。進(jìn)程帳戶是應(yīng)用程序輔助進(jìn)程運(yùn)行時(shí)使用的帳戶:默認(rèn)情況下,該帳戶為系統(tǒng)帳戶,除非進(jìn)行專門配置。
表 1:ASP 和 IIS 配置的 ASP 線程標(biāo)記
應(yīng)用程序標(biāo)識(shí)
建議您使用專門配置的帳戶來(lái)運(yùn)行 ASP .NET 應(yīng)用程序輔助進(jìn)程 (aspnet_wp.exe),該帳戶的權(quán)限比默認(rèn)系統(tǒng)帳戶低。主要原因有兩個(gè)。第一,如果出現(xiàn)安全問(wèn)題,入侵者沒(méi)有管理權(quán)限。第二,它允許應(yīng)用程序服務(wù)提供者 (ASP) 使用較低權(quán)限的帳戶運(yùn)行應(yīng)用程序,因此寄宿的應(yīng)用程序不會(huì)破壞服務(wù)器計(jì)算機(jī)的完整性或執(zhí)行需要管理員權(quán)限的操作。
要使用指定帳戶運(yùn)行 ASP 輔助進(jìn)程,需要在 \WINNT\Microsoft.NET\Framework\Version\Config 文件夾下的根配置文件 (machine.config) 中添加一個(gè) <processModel> 元素,如下所示:
<system.web>
<processModel enable="true" username="domain\user" password="pwd"/>
</system.web>
除指定特定的用戶帳戶外,您還可以將 username 屬性設(shè)置為兩個(gè)專門識(shí)別的值“SYSTEM”和“MACHINE”之一。無(wú)論設(shè)為哪個(gè)值,密碼屬性必須設(shè)為“AutoGenerate”,因?yàn)椴恍枰付☉{據(jù)?!癝YSTEM”設(shè)置(默認(rèn))使用系統(tǒng)帳戶運(yùn)行輔助進(jìn)程,而“MACHINE”使用名稱中帶前綴 ASPNET 的特殊帳戶運(yùn)行輔助進(jìn)程。該帳戶與 IWAM_MACHINENAME 帳戶相同,IIS 寄放標(biāo)準(zhǔn) ASP 應(yīng)用程序時(shí)使用 IWAM_MACHINENAME 帳戶來(lái)運(yùn)行 dllhost.exe 的實(shí)例。ASPNET 帳戶在 .NET 的安裝過(guò)程中創(chuàng)建。
如果您使用自定義帳戶,該帳戶必須具有對(duì)以下目錄的必要訪問(wèn)權(quán)限。
對(duì) %installroot%\ASP .NET 臨時(shí)文件目錄具有讀/寫訪問(wèn)權(quán)限。該根目錄下的子目錄用于動(dòng)態(tài)編譯輸出。
對(duì) %temp% 目錄具有讀/寫訪問(wèn)權(quán)限。在動(dòng)態(tài)編譯過(guò)程中,編譯器將使用該目錄。
對(duì)應(yīng)用程序目錄具有讀訪問(wèn)權(quán)限。
對(duì) %installroot% 層次結(jié)構(gòu)具有讀訪問(wèn)權(quán)限,以允許訪問(wèn)系統(tǒng)程序集。
請(qǐng)注意,相關(guān)的 ACE 是在安裝 ASPNET 帳戶的過(guò)程中定義的。
如果您使用專門配置的進(jìn)程帳戶,您應(yīng)了解它對(duì)使用模擬的限制。雖然您可以繼續(xù)模擬客戶端標(biāo)識(shí),但您不能使用模擬的擴(kuò)展形式(其指定的模擬帳戶已在應(yīng)用程序的 Web.config 文件中定義)。這是因?yàn)樵撨x項(xiàng)要求輔助進(jìn)程具有 SE_TCB_NAME (“作為操作系統(tǒng)的一部分運(yùn)行”) 權(quán)限,而權(quán)限較低的進(jìn)程標(biāo)識(shí)一般不具有此權(quán)限。針對(duì)每個(gè)請(qǐng)求的模擬仍然有效,因?yàn)?IIS 創(chuàng)建了登錄會(huì)話,并將模擬標(biāo)記直接傳遞給輔助進(jìn)程。請(qǐng)注意,此限制僅適用于 Windows 2000 和 Windows NT 4。Microsoft Windows XP 包含有增強(qiáng)功能,允許在不具有此權(quán)限的情況下生成特定的登錄會(huì)話。
詳細(xì)信息,請(qǐng)閱讀《.NET 框架開(kāi)發(fā)人員指南》的以下章節(jié):
ASP .NET 安全性的工作原理
ASP .NET 身份驗(yàn)證
ASP .NET 配置概念
結(jié)合使用 IIS 身份驗(yàn)證與 ASP .NET 模擬
有關(guān) IIS 5.0 中身份驗(yàn)證的詳細(xì)信息,請(qǐng)參閱文章 Internet Information Services 5.0 身份驗(yàn)證方法(英文)。
--------------------------------------------------------------------------------
身份驗(yàn)證方法
在 .NET Web 應(yīng)用程序中可以采用各種身份驗(yàn)證選項(xiàng)。例如,您可以選擇使用某種受支持的 IIS 身份驗(yàn)證機(jī)制,或在應(yīng)用程序代碼中執(zhí)行身份驗(yàn)證。選擇身份驗(yàn)證方法時(shí),應(yīng)考慮以下部分或所有因素:
服務(wù)器和客戶端操作系統(tǒng)
客戶端瀏覽器類型
用戶數(shù)量、位置、用戶名以及密碼數(shù)據(jù)庫(kù)類型
部署考慮,如應(yīng)用程序是基于 Internet 還是 Intranet,及其是否位于防火墻之后。
應(yīng)用程序類型,如,是交互式網(wǎng)站還是非交互式 Web 服務(wù)
要保護(hù)的數(shù)據(jù)的敏感度
性能和可伸縮性因素
身份驗(yàn)證要求。例如,您希望所有用戶均可使用應(yīng)用程序;或希望限制某些區(qū)域僅供注冊(cè)用戶使用,而另一些區(qū)域“僅限管理員使用”。
確定身份驗(yàn)證方法
使用附錄A中的流程圖,有助于您根據(jù)具體應(yīng)用程序的要求確定最適合的身份驗(yàn)證方法。要使用該流程圖,請(qǐng)先回答有關(guān)用戶群和部署模型性質(zhì)的問(wèn)題。圖的結(jié)尾處為適當(dāng)?shù)膫溥x身份驗(yàn)證方法。
檢查完流程圖后,您應(yīng)研究以下小節(jié)。這些小節(jié)提供了關(guān)于各種身份驗(yàn)證方法的更詳細(xì)信息,并提供進(jìn)一步的指導(dǎo)以幫助您優(yōu)化決策程序。在本節(jié)將要結(jié)束之際,您應(yīng)該能夠選出一個(gè)備選身份驗(yàn)證方法。
流程圖決策點(diǎn)解釋
用戶是否必須登錄?是否需要用戶名和密碼以訪問(wèn)站點(diǎn)或服務(wù)?
是否需要個(gè)性化?站點(diǎn)是否可以不需要用戶登錄而提供個(gè)性化內(nèi)容?
用戶帳戶?用戶帳戶是存儲(chǔ)于 Windows NT 域帳戶、Active Directory,還是其他數(shù)據(jù)存儲(chǔ)區(qū),例如關(guān)系型數(shù)據(jù)庫(kù)、其他 LDAP(輕便目錄訪問(wèn)協(xié)議)目錄服務(wù)或 XML 文件?
需要單一登錄還是無(wú)縫登錄?您是否希望用戶從登錄頁(yè)登錄,或需要自動(dòng)進(jìn)行身份驗(yàn)證?例如,在自動(dòng)化的企業(yè)對(duì)企業(yè) (B2B) 交易中可能需要自動(dòng)身份驗(yàn)證。
您是否需要安全登錄?您的系統(tǒng)是否需要使黑客極難通過(guò)網(wǎng)絡(luò)來(lái)盜用用戶名和密碼?這個(gè)決策一般是根據(jù)站點(diǎn)上可用數(shù)據(jù)的敏感度來(lái)做出的。
應(yīng)用程序?qū)⒃?Internet 上運(yùn)行嗎?應(yīng)用程序是否位于防火墻之后(用戶未經(jīng)過(guò)域身份驗(yàn)證),或應(yīng)用程序?qū)⒒?Intranet(最終用戶可能已經(jīng)過(guò)域身份驗(yàn)證)?
您是否需要代理安全環(huán)境?您是否需要業(yè)務(wù)組件與呼叫方標(biāo)識(shí)共同運(yùn)行?如果是這樣,則需要模擬。而且,如果您需要訪問(wèn)系統(tǒng)資源(例如消息隊(duì)列、數(shù)據(jù)庫(kù)或遠(yuǎn)程計(jì)算機(jī)中的文件系統(tǒng)),則需要代理級(jí)別的模擬。
服務(wù)器和客戶端是否僅運(yùn)行 Windows 2000?運(yùn)行環(huán)境中的計(jì)算機(jī)是同樣運(yùn)行 Windows 2000,還是會(huì)有客戶端運(yùn)行著其他操作系統(tǒng)(如 Windows 9x 和 Windows NT 4.0)?
匿名身份驗(yàn)證
使用匿名身份驗(yàn)證,服務(wù)器不請(qǐng)求客戶端向其發(fā)送用戶憑據(jù)。如果您的站點(diǎn)或服務(wù)可供公開(kāi)使用,而您不必知道呼叫方的標(biāo)識(shí),那么這就是一個(gè)好的選擇。同時(shí),也不會(huì)由于與支持的身份驗(yàn)證機(jī)制不兼容而造成瀏覽器限制。所有用戶均可訪問(wèn)配置為匿名身份驗(yàn)證的站點(diǎn)。值得注意的是,盡管您可能已配置了 IIS 以進(jìn)行匿名身份驗(yàn)證,但身份驗(yàn)證可能是在 ASP .NET 層進(jìn)行,而這并不是真正的匿名身份驗(yàn)證。本節(jié)假設(shè) IIS 和應(yīng)用程序均不要求登錄。
典型應(yīng)用方案
以下情況下,您應(yīng)考慮使用匿名身份驗(yàn)證:
無(wú)論是對(duì)于登錄還是業(yè)務(wù)邏輯組件,您都不需要知道呼叫方的名字和/或密碼。
您所保護(hù)的信息被認(rèn)為是“公有的”。
以下情況下,您不應(yīng)考慮使用匿名身份驗(yàn)證:
您要求使用登錄名和密碼以限制用戶群。
其他考慮
選擇匿名身份驗(yàn)證時(shí),您還應(yīng)考慮以下問(wèn)題。
站點(diǎn)中僅包含個(gè)性化內(nèi)容
如果您設(shè)計(jì)的站點(diǎn)僅包含個(gè)性化內(nèi)容,則匿名身份驗(yàn)證可能是一個(gè)好選擇。例如,新聞?wù)军c(diǎn)可以根據(jù)用戶的郵政編碼來(lái)提供當(dāng)?shù)匦畔?,而不需要用戶明確登錄。個(gè)性化功能可以通過(guò)使用獨(dú)立于身份驗(yàn)證的 Cookie 來(lái)執(zhí)行。有關(guān) Cookie 的詳細(xì)信息,請(qǐng)參閱本文檔后面的 Cookie 一節(jié)。
模擬
當(dāng)使用匿名身份驗(yàn)證時(shí),應(yīng)用程序線程將運(yùn)行為:
內(nèi)部匿名 Internet 帳戶 IUSR_MACHINENAME。
在 IIS 中為匿名用戶配置的帳戶。
IIS 系統(tǒng)帳戶。
如果您的應(yīng)用程序使用其他資源,例如 COM+ 組件、數(shù)據(jù)庫(kù)、消息隊(duì)列或 UNC 文件共享,您需要為匿名用戶啟用相應(yīng)權(quán)限。如果是這樣,請(qǐng)考慮以下選項(xiàng):
設(shè)置域控制器以包含所有 Web 和應(yīng)用程序服務(wù)器。配置匿名用戶以作為域用戶運(yùn)行,并具有訪問(wèn)相應(yīng)資源的權(quán)限。此方法中的帳戶管理是集中進(jìn)行的,因此更易于管理。
如果您不在域中運(yùn)行,則可以在每個(gè) Web 和應(yīng)用程序服務(wù)器中創(chuàng)建一個(gè)具有相同名字和密碼的用戶。由于重復(fù)帳戶的管理比較復(fù)雜,所以并不推薦這種方法。
性能
使用匿名網(wǎng)站而不使用 ASP .NET 模擬將帶來(lái)最佳性能,但是應(yīng)用程序配置的安全性最差。
實(shí)現(xiàn)
要實(shí)現(xiàn)匿名身份驗(yàn)證,應(yīng)為匿名身份驗(yàn)證配置 IIS 并配置適當(dāng)?shù)哪涿脩魩?。使?Web.config 文件配置 ASP .NET 以使用無(wú)身份驗(yàn)證。
//web.config 文件
<system.web>
<authentication mode="None" />
</system.web>
基本身份驗(yàn)證
當(dāng) IIS 配置為基本身份驗(yàn)證時(shí),它將指示瀏覽器通過(guò) HTTP 發(fā)送用戶憑據(jù)。密碼和用戶名使用 Base64 編碼方法進(jìn)行編碼。盡管密碼已經(jīng)編碼,但由于其解密相對(duì)較容易,所以仍然是不安全的。瀏覽器將通過(guò)對(duì)話框提示用戶,然后重新發(fā)出原始匿名請(qǐng)求和提供的憑據(jù)(包括用戶名和密碼)。彈出式登錄對(duì)話框不一定適合您的用戶界面設(shè)計(jì)要求。大多數(shù) Internet 瀏覽器支持基本身份驗(yàn)證。
典型應(yīng)用方案
以下情況下,您應(yīng)考慮使用基本身份驗(yàn)證:
您的用戶具有 Windows NT 域或 Active Directory 帳戶。
您需要支持多個(gè)瀏覽器類型,包括 Netscape Navigator 和所有版本的 Internet Explorer(包括 Pocket PC 和 Windows CE 平臺(tái))。
您需要支持通過(guò) Internet 進(jìn)行身份驗(yàn)證。
您需要在應(yīng)用程序代碼中訪問(wèn)明文密碼。
您需要支持代理。
以下情況下,您不應(yīng)考慮使用基本身份驗(yàn)證:
需要安全登錄且不使用安全通道,例如由安全套接字層 (SSL) 提供的通道。
您的用戶存儲(chǔ)在自定義數(shù)據(jù)庫(kù)中,并且沒(méi)有 Windows 帳戶。
您需要一個(gè)自定義表單作為登錄頁(yè)提供給用戶。
其他考慮
選擇基本身份驗(yàn)證時(shí),您還應(yīng)考慮以下問(wèn)題:
使用基本身份驗(yàn)證代理
您可以使用基本身份驗(yàn)證從一個(gè)計(jì)算機(jī)代理另一個(gè)(但不要超過(guò)一個(gè))。代理會(huì)發(fā)生是因?yàn)?IIS 服務(wù)器將通過(guò)調(diào)用 Win32 API LogonUser 實(shí)現(xiàn)本地登錄。由于 IIS 擁有用戶的明文密碼,它可以響應(yīng)遠(yuǎn)程計(jì)算機(jī)的挑戰(zhàn),允許 Web 服務(wù)器代表客戶端操作。如果您需要代理其他計(jì)算機(jī)的安全環(huán)境(超過(guò)單個(gè)躍點(diǎn)),則必須本地登錄到呼叫鏈中的其他計(jì)算機(jī)。通過(guò)使用基本身份驗(yàn)證能夠?qū)崿F(xiàn)這一點(diǎn),因?yàn)槟梢栽L問(wèn)用戶的名字和明文密碼,而名字和明文密碼可以傳遞給其他應(yīng)用程序(例如基于 ISAPI 或 CGI 的應(yīng)用程序)。
保護(hù)基本身份驗(yàn)證
值得注意的是,密碼的破譯相對(duì)容易,因此您應(yīng)將基本身份驗(yàn)證的使用限制在非安全或至多是半安全的應(yīng)用程序中。
您可以通過(guò)與 SSL 結(jié)合來(lái)保護(hù)基本身份驗(yàn)證。這將防止密碼被破譯。目前的許多 Internet 應(yīng)用程序都結(jié)合使用了基本身份驗(yàn)證和 SSL。
實(shí)現(xiàn)
要實(shí)現(xiàn)基本身份驗(yàn)證,應(yīng)在 IIS 內(nèi)對(duì)其進(jìn)行配置,并確保您的用戶在 Web 服務(wù)器上具有“本地登錄”權(quán)限。如果您的 ASP .NET 應(yīng)用程序需要作為經(jīng)過(guò)基本身份驗(yàn)證的用戶來(lái)運(yùn)行,請(qǐng)使用以下 Web.config 文件配置。
// web.config 文件
<system.web>
<authentication mode="Windows" />
</system.web>
簡(jiǎn)要身份驗(yàn)證
簡(jiǎn)要身份驗(yàn)證是 Windows 2000 和 IIS 5.0 的新功能。這種身份驗(yàn)證形式能夠加密用戶的密碼信息并提供一種機(jī)制以便防止某些常見(jiàn)的服務(wù)器攻擊(如重放攻擊)。簡(jiǎn)要身份驗(yàn)證不像基本身份驗(yàn)證那樣使用明文通過(guò)網(wǎng)絡(luò)發(fā)送憑據(jù)。相反,它使用一種由 RSA 開(kāi)發(fā)的散列機(jī)制,稱為 MD5。(有關(guān)詳細(xì)信息,請(qǐng)參閱位于 http://www.ietf.org/rfc/rfc1321.txt ;的“MD5 消息簡(jiǎn)要算法” 。)盡管它對(duì)于 Internet 來(lái)說(shuō)是一個(gè)可行的身份驗(yàn)證選擇,但客戶端和服務(wù)器的要求限制了它的廣泛使用。IIS 與基本身份驗(yàn)證不同,而與 NTLM 和 Kerberos 類似。它不在本地登錄 Web 服務(wù)器,因此不能執(zhí)行代理。
典型應(yīng)用方案
以下情況下,您應(yīng)考慮使用簡(jiǎn)要身份驗(yàn)證:
您的 Web 服務(wù)器運(yùn)行 Windows 2000,并且您的用戶在 Active Directory 中存儲(chǔ)有 Windows 帳戶。
您所有的客戶端均使用 .NET 平臺(tái)或 Internet Explorer 5.x。
您需要比基本身份驗(yàn)證更強(qiáng)大的密碼加密方法。
您需要支持通過(guò) Internet 進(jìn)行身份驗(yàn)證。
以下情況下,您不應(yīng)考慮使用簡(jiǎn)要身份驗(yàn)證:
您的某些客戶端使用非 .NET 或 Internet Explorer 5.0(或更高版本)的平臺(tái)。
您的用戶在 Active Directory 中沒(méi)有存儲(chǔ) Windows 帳戶。
您需要代理。
其他考慮
選擇簡(jiǎn)要身份驗(yàn)證時(shí),您還應(yīng)考慮以下問(wèn)題。
保護(hù)簡(jiǎn)要身份驗(yàn)證
簡(jiǎn)要身份驗(yàn)證的目的是提供比基本身份驗(yàn)證更安全的登錄方法。然而,它沒(méi)有與 SSL、NTLM、Kerberos 或證書身份驗(yàn)證相結(jié)合的基本身份驗(yàn)證安全。
通過(guò) SSL 使用簡(jiǎn)要身份驗(yàn)證是一個(gè)安全的解決方案,但是其部署要求目前限制了它的廣泛使用。
簡(jiǎn)要身份驗(yàn)證的特定平臺(tái)要求
簡(jiǎn)要身份驗(yàn)證要求客戶端運(yùn)行 .NET 或 Internet Explorer 5.x。用戶帳戶必須存儲(chǔ)在 Active Directory 中,且 Active Directory 必須針對(duì)簡(jiǎn)要身份驗(yàn)證進(jìn)行配置。
實(shí)現(xiàn)
您必須為簡(jiǎn)要身份驗(yàn)證配置 IIS。有關(guān)詳情,請(qǐng)參閱 Microsoft 知識(shí)庫(kù)文章 Q222028,設(shè)置簡(jiǎn)要身份驗(yàn)證以使用 Internet Information Services 5.0(英文)。
如果您的 ASP .NET 應(yīng)用程序需要作為已進(jìn)行 IIS 簡(jiǎn)要身份驗(yàn)證的驗(yàn)證用戶來(lái)運(yùn)行,請(qǐng)使用以下 Web.config 配置:
// web.config 文件
<system.web>
<authentication mode="Windows" />
</system.web>
要在 Windows 2000 中使用簡(jiǎn)要身份驗(yàn)證,服務(wù)器必須能訪問(wèn)設(shè)置為進(jìn)行簡(jiǎn)要身份驗(yàn)證的 Active Directory 服務(wù)器。
有關(guān)簡(jiǎn)要身份驗(yàn)證的詳細(xì)信息,請(qǐng)參閱 RFC 2069 規(guī)范 http://www.ietf.org/rfc/rfc2069.txt)。
集成 Windows 身份驗(yàn)證
集成 Windows 身份驗(yàn)證(使用 NTLM 挑戰(zhàn)/響應(yīng)或 Kerberos)涉及對(duì)具有 Windows NT 域或 Active Directory 帳戶的用戶進(jìn)行身份驗(yàn)證。與基本身份驗(yàn)證和簡(jiǎn)要身份驗(yàn)證不同,在該方法中加密密碼不通過(guò)網(wǎng)絡(luò)發(fā)送,因而非常安全。如果服務(wù)器中安裝有 Active Directory 服務(wù),且瀏覽器與 Kerberos V5 身份驗(yàn)證協(xié)議兼容,則將使用 Kerberos V5 協(xié)議和挑戰(zhàn)/響應(yīng)協(xié)議,否則將僅使用挑戰(zhàn)/響應(yīng)協(xié)議。該方法最適合 Intranet 環(huán)境。在這種環(huán)境中,用戶和 Web 服務(wù)器計(jì)算機(jī)在同一個(gè)域中,管理員可以保證每臺(tái)計(jì)算機(jī)均運(yùn)行 Microsoft Internet Explorer 版本 3.01 或更高版本。
典型應(yīng)用方案
以下情況下,您應(yīng)考慮使用集成 Windows 身份驗(yàn)證:
您的用戶具有 Windows NT 域或 Active Directory 帳戶。
您的應(yīng)用程序運(yùn)行于 Intranet 上(在防火墻后)。
所有客戶端均運(yùn)行 Internet Explorer 版本 3.01 或更高版本。
您需要執(zhí)行代理(這需要 Kerberos)。
您需要為域用戶采用無(wú)縫登錄程序(例如,沒(méi)有彈出式登錄對(duì)話框)。
以下情況下,您不應(yīng)考慮使用集成 Windows 身份驗(yàn)證:
您的用戶帳戶是存儲(chǔ)在外部數(shù)據(jù)庫(kù)中,而不是存儲(chǔ)在 Windows NT 域數(shù)據(jù)庫(kù)或 Active Directory 中。
您需要支持通過(guò) Internet 進(jìn)行身份驗(yàn)證。
您的客戶端使用 Netscape Navigator 或其他非 Microsoft 瀏覽器。
您需要獲得客戶的明文密碼。
其他考慮
選擇集成 Windows 身份驗(yàn)證時(shí),還應(yīng)考慮以下問(wèn)題。
NTLM 和 Kerberos 的安全級(jí)別
這兩種協(xié)議均高度安全。對(duì)于 NTLM 和 Kerberos 協(xié)議,密碼不通過(guò)網(wǎng)絡(luò)傳輸。NTLM 使用一種挑戰(zhàn)/響應(yīng)機(jī)制。Kerberos 甚至更加安全,因?yàn)樗С只ハ囹?yàn)證(即,客戶端可以驗(yàn)證其與之通訊的服務(wù)器)。
代理問(wèn)題
NTLM 協(xié)議不支持代理。當(dāng)客戶端的憑據(jù)傳送到 IIS 服務(wù)器之后,它們不能被傳送到后端服務(wù)器進(jìn)行身份驗(yàn)證。但是,Kerberos 支持代理,允許多個(gè)下游計(jì)算機(jī)的其他進(jìn)程代理客戶端憑據(jù)。例如,您可以使用 Kerberos 將 Web 用戶的憑據(jù)提供給 COM+ 中間層,并通過(guò)該層到達(dá) Microsoft SQL Server 數(shù)據(jù)庫(kù)(配置為 Windows 集成安全性)。Active Directory 的默認(rèn)配置中未啟用 Kerberos 身份驗(yàn)證。在決定將其作為代理解決方案之前,您必須確保您的環(huán)境支持 Kerberos。
Internet 的使用
NTLM 和 Kerberos 協(xié)議在 Internet 中均不常用。要在 Internet 中使用 Kerberos,關(guān)鍵問(wèn)題是安全授權(quán)需要集中并對(duì)所有用戶可用。只有基礎(chǔ)設(shè)施到位才能實(shí)現(xiàn)這一點(diǎn)。部署 Internet 的另一個(gè)問(wèn)題是非 Microsoft 瀏覽器不支持這些協(xié)議。對(duì)于特定的客戶群,這可能會(huì)是一個(gè)限制因素。
性能和可伸縮性
Kerberos 比 NTLM 快。但是,這兩種協(xié)議均比基本身份驗(yàn)證或某些自定義身份驗(yàn)證方法慢。如果您希望大量用戶同時(shí)登錄,就需要仔細(xì)設(shè)計(jì) Active Directory 的配置。如果您擁有數(shù)百萬(wàn)的潛在用戶,則您可以考慮使用高性能數(shù)據(jù)庫(kù)(如 SQL Server)來(lái)存儲(chǔ)用戶的名字和密碼。如果您在多層應(yīng)用程序中代理安全環(huán)境,就很可能會(huì)遇到可伸縮性問(wèn)題。特別是,不能使用數(shù)據(jù)庫(kù)連接池等中間層解決方案。
實(shí)現(xiàn)
要實(shí)現(xiàn) Kerberos 或 NTLM,您需要配置 IIS 以使用集成 Windows 身份驗(yàn)證。如果您需要支持運(yùn)行非 Internet Explorer 的客戶端,則可以啟用基本身份驗(yàn)證以結(jié)合 NTLM 或 Kerberos。
配置 Kerberos 時(shí),您需要考慮這些特定細(xì)節(jié):
客戶端和服務(wù)器必須都在同一 Windows 2000 域中運(yùn)行 Windows 2000。
必須啟用客戶端的用戶帳戶以使用代理。
必須啟用服務(wù)器的帳戶以使用代理。
如果您的 ASP .NET 應(yīng)用程序需要作為已由 IIS 使用集成 Windows 身份驗(yàn)證進(jìn)行過(guò)驗(yàn)證的用戶來(lái)運(yùn)行,請(qǐng)使用以下 Web.config 配置:
// web.config 文件
<system.web>
<authentication mode="Windows" />
</system.web>
有關(guān)使用 Kerberos 的詳細(xì)信息,請(qǐng)參閱:
Windows 2000 中的 Kerberos 組件(英文)
Kerberos 說(shuō)明(英文)
證書身份驗(yàn)證
證書是安裝在計(jì)算機(jī)中的數(shù)字“密鑰”。計(jì)算機(jī)試圖訪問(wèn)服務(wù)器時(shí),密鑰將自動(dòng)傳送以對(duì)用戶進(jìn)行身份驗(yàn)證??蛻舳俗C書可被映射到域或 Active Directory 中的 Windows 帳戶。如果您在 ASP .NET 中使用 Windows 身份驗(yàn)證提供程序,應(yīng)用程序線程將作為證書所映射的用戶運(yùn)行。您也可在 ASP .NET 中實(shí)現(xiàn)自定義身份驗(yàn)證,例如,您可以使用證書內(nèi)包含的電子郵件地址(或類似的唯一字段)。從客戶端的觀點(diǎn)來(lái)看,安全性是無(wú)縫的,因?yàn)榭蛻舳瞬恍枰褂玫卿涰?yè)來(lái)登錄。這就使得證書在自動(dòng)化業(yè)務(wù)流程方面成為一個(gè)有吸引力的選擇。
典型應(yīng)用方案
以下情況下,您應(yīng)考慮使用證書身份驗(yàn)證:
您所保護(hù)的數(shù)據(jù)非常敏感,您需要非常安全的解決方案。
您需要互相身份驗(yàn)證。
您希望第三方能夠管理服務(wù)器和證書擁有者之間的關(guān)系。
您希望實(shí)現(xiàn)無(wú)縫的客戶端交互,例如自動(dòng) B2B 交易。
以下情況下,您不應(yīng)考慮使用證書身份驗(yàn)證:
發(fā)布和管理客戶端證書的成本超過(guò)了增加安全性所獲得的價(jià)值。
其他考慮
選擇證書身份驗(yàn)證時(shí),您還應(yīng)考慮以下問(wèn)題。
部署
您需要將客戶端證書物理部署在客戶端工作站中。有多種方法可以進(jìn)行此部署,從 Web 部署到從 CD-ROM 安裝證書。通常是部署的問(wèn)題導(dǎo)致了證書模式的使用不如其他與 SSL 相結(jié)合的身份驗(yàn)證模式廣泛。
映射到 Windows 帳戶
可以將證書映射到域或 Active Directory 帳戶。如果需要對(duì)個(gè)別用戶進(jìn)行身份驗(yàn)證,可以使用一種稱為“一對(duì)一映射”的技術(shù),將證書映射到單獨(dú)帳戶。如果使用 Active Directory 映射,則對(duì)一對(duì)一映射沒(méi)有限制。
如果需要驗(yàn)證來(lái)自特定組或組織的所有用戶,則可以使用多對(duì)一映射,例如,將所有包含同一公司名稱的用戶映射到一個(gè)帳戶。
例如,考慮以下 B2B 方案:
公司 A 允許其合作公司 B 查看其部分內(nèi)部網(wǎng)站。
公司 B 的計(jì)算機(jī)安裝有證書。
多對(duì)一映射的結(jié)果是,ASP .NET 應(yīng)用程序?qū)⒆鳛橥ㄓ玫摹癈ompanyB” Windows 帳戶運(yùn)行。
有關(guān)證書的深入信息,請(qǐng)參閱由 Michael Howard 所著的《設(shè)計(jì) Microsoft Windows 2000 基于 Web 的安全應(yīng)用程序》。
實(shí)現(xiàn)
您必須配置 IIS 以進(jìn)行證書身份驗(yàn)證。有關(guān)將公共密鑰證書映射到 Windows 2000 用戶帳戶的詳細(xì)信息,請(qǐng)參閱將證書映射到用戶帳戶的循序漸進(jìn)指南(英文)。
Passport 身份驗(yàn)證
Passport 身份驗(yàn)證是由 Microsoft 提供的集中身份驗(yàn)證服務(wù)。使用 Passport 時(shí),在某些情況下您不必實(shí)現(xiàn)自己的身份驗(yàn)證代碼、登錄頁(yè)和用戶表。Passport 使用 Cookie 機(jī)制工作。如果客戶端以前已經(jīng)通過(guò)了 Passport 驗(yàn)證,則允許它們?cè)L問(wèn)您的站點(diǎn)。否則,它們將被自動(dòng)重定向到 Passport 站點(diǎn)以進(jìn)行身份驗(yàn)證。
如果您需要在多個(gè)域之間進(jìn)行單一登錄(這些域也支持 Passport),那么 Passport 是一個(gè)好選擇。Passport 不僅提供身份驗(yàn)證服務(wù),還提供包括配置文件管理和采購(gòu)服務(wù)在內(nèi)的其他服務(wù)。
在 Windows 2000 平臺(tái)上,Passport 沒(méi)有直接集成到操作系統(tǒng)內(nèi)部的任何身份驗(yàn)證和授權(quán)機(jī)制。.NET 框架確實(shí)會(huì)檢查 Passport Cookie,但如果您維護(hù)自己的數(shù)據(jù)庫(kù),您必須實(shí)現(xiàn)自己的代碼,以將 Passport 用戶映射為自己的用戶,同時(shí)還要實(shí)現(xiàn)自己的授權(quán)機(jī)制。
典型應(yīng)用方案
以下情況下,您應(yīng)考慮使用 Passport 身份驗(yàn)證:
您的站點(diǎn)要與其他啟用 Passport 的站點(diǎn)結(jié)合使用,同時(shí)您希望訪問(wèn)這些站點(diǎn)的用戶能夠進(jìn)行單一登錄。
您不想維護(hù)用戶名和密碼數(shù)據(jù)庫(kù)。
以下情況下,您不應(yīng)考慮使用 Passport 身份驗(yàn)證:
您希望使用已經(jīng)存儲(chǔ)在自己的數(shù)據(jù)庫(kù)或 Active Directory 中的用戶名和密碼。(盡管有可能使用額外的代碼將 Passport ID 映射為用戶帳戶。)
您的客戶端是通過(guò)編程來(lái)訪問(wèn)站點(diǎn)的其他計(jì)算機(jī)。
其他考慮
選擇 Passport 身份驗(yàn)證時(shí),您還應(yīng)考慮以下問(wèn)題。
啟用 Passport
使用 Passport 身份驗(yàn)證要求站點(diǎn)注冊(cè) Passport 服務(wù)并在服務(wù)器中安裝 Passport SDK。
代理
在 Windows 2000 中,不可能從一個(gè)服務(wù)器將用戶的 Passport 安全憑據(jù)代理到另一個(gè)。
映射到用戶帳戶
Passport 用戶 ID (PUID) 僅僅是一個(gè)標(biāo)識(shí)。如果您的用戶帳戶是在 Active Directory 或任何自定義數(shù)據(jù)庫(kù)中定義的,并且您需要將 PUID 映射為用戶,則您需要實(shí)現(xiàn)自己的自定義代碼。Windows 的未來(lái)版本可能會(huì)提供將 PUID 映射到 Windows 帳戶的本機(jī)支持。
保護(hù) Passport
當(dāng) Passport 作為單機(jī)身份驗(yàn)證方法使用時(shí),加密 Cookie 的本質(zhì)使得 Passport 比較安全。然而,為了避免重放攻擊并維持最高安全級(jí)別,Passport 需要與 SSL 結(jié)合使用。
實(shí)現(xiàn)
要實(shí)現(xiàn) Passport,您需要在服務(wù)器中安裝 Passport SDK。您還需要向 Passport 注冊(cè)以使用服務(wù)。您必須按如下方法配置 web.config 文件:
// web.config 文件
<system.web>
<authentication mode="Passport" />
</system.web>
有關(guān) Passport 服務(wù)的詳細(xì)信息,請(qǐng)參閱:
Passport 身份驗(yàn)證提供程序(英文)
Passport 技術(shù)白皮書(英文)
Passport 開(kāi)發(fā)人員信息(英文)
表單身份驗(yàn)證
表單身份驗(yàn)證是指接受用戶憑據(jù)的自定義用戶界面組件,例如,一個(gè)用戶名和密碼?,F(xiàn)在使用的許多 Internet 應(yīng)用程序具有這種供用戶登錄的表單。值得注意的是,表單本身并不執(zhí)行身份驗(yàn)證,它僅僅是一種獲得用戶憑據(jù)的方法。身份驗(yàn)證是通過(guò)使用自定義代碼訪問(wèn)用戶名和密碼數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)的。
驗(yàn)證用戶身份后,服務(wù)器一般會(huì)通過(guò)某種方式向客戶端表明其已經(jīng)通過(guò)身份驗(yàn)證,可以進(jìn)行后續(xù)請(qǐng)求。如果需要,您可以強(qiáng)制用戶驗(yàn)證每個(gè)請(qǐng)求,但這樣會(huì)影響性能和可伸縮性。您應(yīng)考慮兩種基本方法來(lái)識(shí)別以前登錄過(guò)的客戶端:
Cookie。Cookie 是最初由服務(wù)器向客戶端發(fā)送的一小段數(shù)據(jù)。隨后,由客戶端隨每個(gè) HTTP 請(qǐng)求將其發(fā)送回服務(wù)器。它可以用作客戶端已經(jīng)通過(guò)身份驗(yàn)證的標(biāo)志。ASP .NET 通過(guò) CookieAuthenticationProvider 模塊為您提供了使用 Cookie 進(jìn)行表單身份驗(yàn)證的機(jī)制。大多數(shù) Web 瀏覽器(包括 Internet Explorer 和 Netscape Navigator)均支持 Cookie。
自定義。您可以實(shí)現(xiàn)自己的自定義機(jī)制來(lái)向服務(wù)器標(biāo)識(shí)客戶端。如果您的客戶端禁用了 Cookie,您可以考慮在每個(gè) URL 查詢字符串中存儲(chǔ)一個(gè)唯一標(biāo)識(shí)符?;蛘呤褂么鎯?chǔ)在永久性頂級(jí)或不可見(jiàn)框架中的隱藏表單域。無(wú)論如何,您要確保黑客不能通過(guò)編程模擬成已經(jīng)通過(guò)應(yīng)用程序身份驗(yàn)證的用戶。
Cookie 廣泛應(yīng)用于使用表單身份驗(yàn)證的網(wǎng)站。.NET 的最初版本將僅支持使用 Cookie 的表單身份驗(yàn)證。
典型應(yīng)用方案
以下情況下,您應(yīng)考慮使用表單驗(yàn)證:
用戶名和密碼存儲(chǔ)在 Windows 帳戶以外的位置。請(qǐng)注意,Windows 帳戶也可以使用表單身份驗(yàn)證。
您要在 Internet 上部署應(yīng)用程序。
您需要支持所有瀏覽器和客戶端操作系統(tǒng)。
您希望為用戶提供自己的用戶界面表單作為登錄頁(yè)。
以下情況下,您不應(yīng)考慮使用表單驗(yàn)證:
您要為公司 Intranet 部署應(yīng)用程序,并且可以利用集成 Windows 身份驗(yàn)證。
您不能通過(guò)編程訪問(wèn)來(lái)驗(yàn)證用戶名和密碼。
其他考慮
選擇表單身份驗(yàn)證時(shí),您還應(yīng)考慮以下問(wèn)題。
保護(hù)表單身份驗(yàn)證
如果用戶是通過(guò)登錄頁(yè)來(lái)提交密碼的,您可以使用 SSL 來(lái)保護(hù)通道,以防密碼被盜。如果您使用 Cookie 來(lái)維護(hù)用戶在各個(gè)請(qǐng)求之間的標(biāo)識(shí),您應(yīng)當(dāng)了解黑客通過(guò)網(wǎng)絡(luò)監(jiān)視程序“盜用”用戶 Cookie 的潛在危險(xiǎn)。使用 Cookie 時(shí),要使站點(diǎn)真正安全,唯一的方法是站點(diǎn)內(nèi)的所有通訊都使用 SSL。對(duì)大多數(shù)商業(yè)網(wǎng)站來(lái)說(shuō),由于這種方法的運(yùn)行開(kāi)銷太大,所以不切實(shí)際。使用 ASP .NET,您可以使服務(wù)器定期重生成 Cookie。這種使 Cookie 過(guò)期的策略是為了防止其他用戶盜用 Cookie 訪問(wèn)站點(diǎn)。
性能和可伸縮性
設(shè)計(jì)大流量網(wǎng)站時(shí),您需要考慮驗(yàn)證用戶身份所帶來(lái)的性能影響。如果您預(yù)計(jì)會(huì)有大量用戶同時(shí)登錄,您需要盡快完成憑據(jù)確認(rèn)過(guò)程。
如果使用 SSL,由于必須執(zhí)行額外的加密步驟,性能會(huì)明顯下降。在 Web 中,您應(yīng)將實(shí)現(xiàn)安全登錄的服務(wù)器和內(nèi)容服務(wù)器分開(kāi),以滿足性能要求。
檢查 Cookie 的存在
如果您使用的是 .NET,則檢查 Cookie 存在的進(jìn)程是自動(dòng)實(shí)現(xiàn)的。但如果不使用 .NET,則有兩種基本方法:
實(shí)現(xiàn) ISAPI 篩選器,它確認(rèn)客戶端請(qǐng)求中 Cookie 的存在,證明客戶端已經(jīng)通過(guò)身份驗(yàn)證。如果 Cookie 存在,則允許請(qǐng)求繼續(xù)。如果 Cookie 不存在,則將客戶端重定向到登錄頁(yè)。如上所述的 ISAPI 篩選器可以由 Microsoft Commerce Server 2000 實(shí)現(xiàn)。
您可以在每個(gè) Web 頁(yè)的開(kāi)始處編寫代碼檢查 Cookie 是否存在,或編寫由 Web 頁(yè)傳遞的其他自定義值。如果標(biāo)記不存在,代碼可將用戶重定向到登錄頁(yè)。這一實(shí)現(xiàn)方法很簡(jiǎn)單;但是,您可能無(wú)法保護(hù)除 ASP 頁(yè)以外的資源。例如,圖像文件可能仍然可以訪問(wèn)。
如果您使用的是 ASP .NET,則可以利用表單身份驗(yàn)證提供的內(nèi)置功能。
使用表單身份驗(yàn)證與 Windows 帳戶
如果您部署的是 Internet 應(yīng)用程序,而您的用戶在服務(wù)器中具有 Windows 帳戶,則可以使用表單身份驗(yàn)證或 SSL 上的表單身份驗(yàn)證,以替代基本身份驗(yàn)證和簡(jiǎn)要身份驗(yàn)證。
如果您的應(yīng)用程序基于 Intranet,并且已經(jīng)在使用集成 Windows 身份驗(yàn)證,則表單身份驗(yàn)證可能并非好的解決方案。您公司的安全策略可能也不允許用戶將密碼輸入 HTML 表單。
實(shí)現(xiàn)
要實(shí)現(xiàn)表單身份驗(yàn)證,您必須創(chuàng)建自己的登錄頁(yè)并重定向未驗(yàn)證客戶端的 URL。您還必須創(chuàng)建自己的帳戶查找方案。使用 ASP .NET,可以使用以下 Web.config 配置:
// web.config 文件
<system.web>
<authentication mode="Forms" />
</system.web>
因?yàn)槟鷮?shí)現(xiàn)的是自己的身份驗(yàn)證,一般可以將 IIS 配置為匿名身份驗(yàn)證。
有關(guān)實(shí)現(xiàn) SSL 的詳細(xì)信息,請(qǐng)參閱以下文章。
Web 安全性揭密:最大限度地利用 IIS 安全性(英文)
《Internet Information Services 5.0 資源指南》中的“配置 IIS 5.0 安全性”
Cookie
Cookie 是由 Web 服務(wù)器放在您的硬盤驅(qū)動(dòng)器上的一個(gè)小文本文件。其主要目的是讓服務(wù)器能夠識(shí)別返回的客戶端。無(wú)論是否存在身份驗(yàn)證機(jī)制,您都可以使用 Cookie。請(qǐng)考慮以下應(yīng)用方案:
與表單身份驗(yàn)證結(jié)合使用。服務(wù)器根據(jù)身份驗(yàn)證向客戶端發(fā)布一個(gè) Cookie,并根據(jù)提交回服務(wù)器的 Cookie 來(lái)驗(yàn)證后續(xù)請(qǐng)求。
僅用于向用戶提供自定義內(nèi)容的個(gè)性化站點(diǎn)。
ASP .NET 提供了一種機(jī)制來(lái)創(chuàng)建 Cookie 并自動(dòng)檢查客戶端請(qǐng)求中是否存在 Cookie??梢允褂?.NET 框架支持的三級(jí) DES 方案對(duì)由 ASP .NET 創(chuàng)建的 Cookie 進(jìn)行有選擇的加密。您也可以實(shí)現(xiàn)自己的 Cookie 提供程序并在表單身份驗(yàn)證中使用。
有關(guān) Cookie 的詳細(xì)信息,請(qǐng)參閱關(guān)于 Cookie 的信息(英文)。
其他考慮
不同瀏覽器類型可能對(duì) Cookie 的大小有不同的限制。RFC 2019 指定的大小限制為 4 KB。Internet Explorer 5 對(duì) Cookie 沒(méi)有大小限制。瀏覽器的安全設(shè)置必須配置為接受 Cookie,程序才能正常工作。
--------------------------------------------------------------------------------
Web 服務(wù)安全性
Web 服務(wù)是基于 ASP .NET 結(jié)構(gòu)的應(yīng)用程序,可以通過(guò) Internet 編程調(diào)用。從安全角度看,它存在的問(wèn)題與開(kāi)發(fā)交互式網(wǎng)站的問(wèn)題類似。您需要使用與保護(hù) ASP .NET 資源相同的機(jī)制來(lái)保護(hù) Web 服務(wù)(如 IIS 和 ASP .NET 身份驗(yàn)證提供程序)。但是,設(shè)計(jì)過(guò)程中您還需要考慮這些額外因素:
客戶端交互。您的 Web 服務(wù)可能沒(méi)有連接和輸入安全憑據(jù)的交互用戶。而您的“用戶”可能是應(yīng)用程序。
方法級(jí)別安全性。您可能需要在方法級(jí)別授權(quán)用戶,以限制使用特定方法,您可以采用類似于 COM+ 組件方法級(jí)別安全性的方法來(lái)實(shí)現(xiàn)這一目的。
代理。您的 Web 服務(wù)可能需要(也可能不需要)呼叫其他服務(wù)并維護(hù)原始呼叫方的安全環(huán)境。
Web 服務(wù)身份驗(yàn)證
Web 服務(wù)需要以某種方式接受用戶憑據(jù)。如果服務(wù)是非交互式的,則需要獲得呼叫方的安全標(biāo)記,或需要顯露適當(dāng)?shù)姆椒ㄒ栽试S提供憑據(jù)。以下身份驗(yàn)證方法容易使用,不需要用戶輸入憑據(jù),對(duì)于可編程 Web 服務(wù)來(lái)說(shuō)是很好的選擇:
基本、簡(jiǎn)要和集成 Windows 身份驗(yàn)證
證書映射身份驗(yàn)證
應(yīng)用程序?qū)S没蜃远x身份驗(yàn)證
以下的選項(xiàng)也有應(yīng)用潛力:
Internet 協(xié)議安全性
Passport
使用 Windows 帳戶和 IIS 身份驗(yàn)證
您需要考慮的問(wèn)題與本文身份驗(yàn)證方法一節(jié)中所述的問(wèn)題一樣。本實(shí)現(xiàn)方法所需的自定義代碼最少,同時(shí),您可以使用 Windows ACL 授權(quán)對(duì)其他資源的訪問(wèn)。
使用證書和證書映射
當(dāng)使用證書身份驗(yàn)證時(shí),客戶端和服務(wù)器之間可以進(jìn)行無(wú)縫交互;即,客戶端不必通過(guò)編程提供用戶名和密碼。而且,這是一種高度安全的機(jī)制。B2B 交易(如提交訂單)是使用證書的理想場(chǎng)合。如果您使用證書映射來(lái)獲取 Windows 用戶帳戶,您也可以使用 Windows ACL 來(lái)授權(quán)對(duì)資源的訪問(wèn)。
自定義身份驗(yàn)證
您可以實(shí)現(xiàn)自定義身份驗(yàn)證解決方案。與集成 Windows 身份驗(yàn)證方法相比,此解決方案的優(yōu)點(diǎn)是,不再需要應(yīng)用程序來(lái)為每個(gè)用戶維護(hù)各自的帳戶。您還可以一起忽略 IIS 身份驗(yàn)證,而在 Web 服務(wù)代碼中使用自己的自定義方法,并根據(jù)應(yīng)用程序特定的要求進(jìn)行優(yōu)化。
可能的 Web 服務(wù)自定義身份驗(yàn)證解決方案包括:
接受用戶名和密碼作為方法調(diào)用的參數(shù)。
提供一種必須在調(diào)用其他方法之前調(diào)用的登錄方法。您可以使用 Microsoft .NET 框架的 Cookie 功能來(lái)驗(yàn)證對(duì)登錄方法的調(diào)用。
使用 SOAP 標(biāo)頭或 SOAP 正文來(lái)存儲(chǔ)憑據(jù)。
創(chuàng)建自定義 HTTP 標(biāo)頭或正文來(lái)存儲(chǔ)憑據(jù)。
Internet 協(xié)議安全性
如果您知道客戶端的 IP 地址,例如,客戶端是調(diào)用封裝在 Web 服務(wù)業(yè)務(wù)邏輯的中間層 Web 服務(wù)器,則可以選擇 Internet 協(xié)議安全性 (IPSec)。此方法允許您根據(jù) IP 地址來(lái)限制連接到 Web 服務(wù)的計(jì)算機(jī)。
該方法在 Internet 方案中不可行,因?yàn)槟A(yù)先不知道客戶端的 IP 地址。
有關(guān) IPSec 的詳細(xì)信息,請(qǐng)參閱 MSDN 文章 Microsoft Windows 2000 服務(wù)器的 IP 安全性(英文)。
在 Web 服務(wù)中使用 Passport
有時(shí) Web 服務(wù)可能會(huì)使用 Passport 進(jìn)行身份驗(yàn)證。但是,它的使用很有限,因?yàn)樗髮⑽赐ㄟ^(guò)驗(yàn)證的客戶重定向到 Passport 站點(diǎn)。對(duì)非交互式客戶端來(lái)說(shuō),重定向會(huì)出現(xiàn)問(wèn)題,除非專門為此編程來(lái)處理重定向到 Passport 服務(wù)器的情況。
授權(quán)
完成用戶身份驗(yàn)證后,您可能需要授權(quán)其訪問(wèn) Web 服務(wù)。以下是幾種授權(quán)選項(xiàng):
使用 Windows ACL
使用 URL 授權(quán)
使用 .NET Principal 對(duì)象
使用 Windows ACL
使用 Windows ACL,您可以創(chuàng)建特定應(yīng)用程序文件的文件系統(tǒng)許可。如果您的 Web 服務(wù)對(duì)用戶進(jìn)行 Windows 帳戶身份驗(yàn)證并使用模擬,則可以使用此解決方案。
使用 URL 授權(quán)
URLAuthorizationModule 將用戶和角色映射到 URI 名稱空間中的元素。該模塊同時(shí)實(shí)現(xiàn)肯定和否定的授權(quán)聲明。也就是說(shuō),該模塊可以根據(jù)用戶的某種身份(例如角色關(guān)系),選擇性地允許或拒絕該用戶訪問(wèn) URI 名稱空間中的任意元素。下面的例子為某些域用戶授權(quán),但拒絕其他用戶。
<configuration>
<system.web>
<authentication mode="Windows" />
<authorization>
<allow users="domain1\user, domain2\user2, domain1\user3 />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Windows Principal 對(duì)象
.NET 框架類庫(kù) (BCL) 中的 System.Security.Principal 名稱空間提供了一個(gè) WindowsPrincipal 對(duì)象來(lái)表示代碼運(yùn)行的安全環(huán)境。使用 IIS 中的 Windows 身份驗(yàn)證時(shí),該對(duì)象將自動(dòng)創(chuàng)建。它允許您檢查 Windows 用戶的 Windows 組成員,并相應(yīng)地限制訪問(wèn)權(quán)限。
Generic Principal 對(duì)象
Generic Principal 對(duì)象可根據(jù)您自己的自定義角色來(lái)創(chuàng)建。如果您擁有自己的用戶/角色數(shù)據(jù)庫(kù),則可以使用它。Principal 對(duì)象在 OnAuthenticate 事件中填充。您可以將自定義表映射到在此事件中映射的 Windows 帳戶。無(wú)論如何,您都可以為該特殊用戶創(chuàng)建一個(gè)自定義 Principal 對(duì)象。
對(duì)于已經(jīng)通過(guò)身份驗(yàn)證的返回用戶,您可以使用 Cookie 來(lái)重新為返回用戶重新創(chuàng)建 Principal 對(duì)象。
角色和方法級(jí)別安全性
您可能需要使用方法級(jí)別安全性來(lái)限制由特殊客戶端當(dāng)事者調(diào)用的特殊方法。有許多方法可以處理該問(wèn)題。
如果您使用 Windows 帳戶,可以以 Windows 組的形式為用戶創(chuàng)建角色。因?yàn)?ASP 線程將模擬客戶端,您將獲得一個(gè) Windows Principal 對(duì)象;請(qǐng)使用以下方法:
為 ASP .NET 線程訪問(wèn)的受保護(hù)資源創(chuàng)建 ACL。
從每一種方法調(diào)用 WindowsPrincipal 對(duì)象中的 IsInRole 方法,以驗(yàn)證調(diào)用方具有適當(dāng)?shù)臋?quán)限。您還可以在代碼中實(shí)現(xiàn)邏輯語(yǔ)句,根據(jù)客戶端的組成員身份調(diào)用特定的子例程。
如果您使用自定義數(shù)據(jù)庫(kù)中的用戶和角色創(chuàng)建 Generic Principal 對(duì)象:
您可以通過(guò)編程調(diào)用 Principal 對(duì)象的 IsInRole 方法以檢查角色成員身份,其方式與上文所述的 Windows Principal 對(duì)象相同。
如果您不使用 Principal 對(duì)象,則可以選擇其他選項(xiàng):
接受用戶憑據(jù)作為方法調(diào)用的參數(shù)并進(jìn)行查找。
方法調(diào)用的第一項(xiàng)操作是驗(yàn)證 Cookie 的存在。
創(chuàng)建一個(gè)登錄方法返回自定義鍵值。后續(xù)的方法將接受此鍵值作為參數(shù)。這與使用受瀏覽器支持的 Cookie 類似,但是它在客戶端不支持 Cookie 的情況下也可以使用。
代理
和 ASP .NET 網(wǎng)站一樣,Web 服務(wù)也存在同樣的代理問(wèn)題。要將安全環(huán)境代理到 Web 服務(wù),您需要使用 Kerberos 身份驗(yàn)證,或者必須傳遞憑據(jù)以便于運(yùn)行在其他計(jì)算機(jī)上的 Web 服務(wù)能夠調(diào)用 LogonUser(對(duì)于 Windows 服務(wù)器)或等價(jià)身份驗(yàn)證 API(對(duì)于非 Windows 服務(wù)器)。
客戶端訪問(wèn)
如果您通過(guò)編程與 Web 服務(wù)連接,您可以利用 .NET 類進(jìn)行客戶端連接。.NET 客戶端支持的身份驗(yàn)證協(xié)議有:
基本
簡(jiǎn)要
Windows 集成(NTLM 和 Kerberos)
證書
自定義
--------------------------------------------------------------------------------
代碼訪問(wèn)安全性
為了保護(hù)計(jì)算機(jī)系統(tǒng)不受惡意代碼的干擾,也為了保證移動(dòng)代碼的安全運(yùn)行,.NET 框架提供了一種稱為代碼訪問(wèn)安全性 (CAS) 的安全機(jī)制。CAS 是一種 .NET 安全特征,適用于所有 .NET 托管代碼,如 ASP .NET Web 應(yīng)用程序。盡管如此,在編寫以下特定代碼時(shí)您需要牢記這一點(diǎn):
設(shè)計(jì)瀏覽器承載的控件
承載第三方應(yīng)用程序
在共享服務(wù)器上承載來(lái)自不同供應(yīng)商的程序集
您希望保護(hù)某些本機(jī)功能(如文件寫 API)以供某些程序集使用
根據(jù)代碼的來(lái)源和代碼標(biāo)識(shí)的其他特征(如強(qiáng)加密程序集名),CAS 允許代碼有不同的可信度,這取決于您的安全策略。CAS 減少了您的代碼被其他惡意代碼濫用的可能性。它使您可以專門設(shè)置允許代碼執(zhí)行的操作,以及決不允許代碼執(zhí)行的操作。特別是,CAS 支持許可支持機(jī)制,通過(guò)該機(jī)制,代碼可明確請(qǐng)求特定許可、或明確拒絕其他不需要的許可。
代碼訪問(wèn)許可
代碼訪問(wèn)安全性依賴于代碼訪問(wèn)許可概念。每個(gè)許可代表代碼訪問(wèn)受保護(hù)資源(如文件、目錄、注冊(cè)表項(xiàng))的權(quán)限或執(zhí)行受保護(hù)操作(如調(diào)用非托管代碼)的權(quán)限。代碼將請(qǐng)求許可,而運(yùn)行時(shí)安全策略將決定授予何種許可。有關(guān)完整列表,請(qǐng)參閱代碼訪問(wèn)許可(英文)。
.NET 允許管理員向應(yīng)用程序分配預(yù)定義的許可集。這些許可集根據(jù)應(yīng)用程序的可信度而有所不同。默認(rèn)情況下,應(yīng)用程序根據(jù)代碼的數(shù)字簽名、原始格式和應(yīng)用程序位置等證據(jù)獲得信任級(jí)別。
例如,運(yùn)行在 UNC 共享(在 Intranet 安全區(qū)域運(yùn)行)上的應(yīng)用程序?qū)@得 LocalIntranet 許可集。而運(yùn)行在本地計(jì)算機(jī)(在 MyComputer 安全區(qū)域運(yùn)行)上的應(yīng)用程序?qū)@得 FullTrust 許可集。
通過(guò)為 ASP .NET Web 應(yīng)用程序分配信任級(jí)別,可以進(jìn)一步配置它們。信任級(jí)別的配置是通過(guò)使用配置文件中的 <trust> 元素來(lái)實(shí)現(xiàn)的。
<trust level="Full | High | Low | None" originUrl="url" />
每個(gè)級(jí)別都決定了應(yīng)用程序的許可程度,其細(xì)節(jié)在 XML 安全策略文件中指定。每一級(jí)別都映射到一個(gè)特定文件。ASP .NET 的默認(rèn)映射是:
高 - 映射到 web_hightrust.config 這一級(jí)別提供的授權(quán)允許應(yīng)用程序讀/寫應(yīng)用程序目錄(服從于操作系統(tǒng)許可),并允許應(yīng)用程序取代身份驗(yàn)證 Principal 對(duì)象。它還限制應(yīng)用程序調(diào)用非托管代碼。
低 - 映射到 web_lowtrust.config 這一級(jí)別允許應(yīng)用程序讀取應(yīng)用程序目錄,并提供有限的網(wǎng)絡(luò)連接。如果 <trust> 元素的 originUrl 屬性配置恰當(dāng),應(yīng)用程序就能夠連回其承載站點(diǎn)。
無(wú) - 映射到 web_notrust.config 這一級(jí)別提供基本執(zhí)行許可,并支持應(yīng)用程序使用獨(dú)立存儲(chǔ)(一種允許代碼與保存數(shù)據(jù)安全關(guān)聯(lián)的機(jī)制)。
請(qǐng)注意,完全信任沒(méi)有相應(yīng)的配置文件,因?yàn)橥耆湃卧试S應(yīng)用程序使用所有資源(服從于操作系統(tǒng)許可),如同在沒(méi)有代碼訪問(wèn)安全性的情況下運(yùn)行一樣(但 CAS 不能關(guān)閉托管代碼)。您可以使用配置文件中的 <securityPolicy> 元素替代這些映射,也可以自定義和擴(kuò)展每一級(jí)別。您還可創(chuàng)建自己的定義任意許可集的級(jí)別。以下所示為默認(rèn) <securityPolicy> 映射集。
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Low" policyFile="web_lowtrust.config" />
<trustLevel name="None" policyFile="web_notrust.config" />
</securityPolicy>
鎖定配置設(shè)置
ASP .NET 配置在本質(zhì)上是層次化的,在計(jì)算機(jī)級(jí)別、應(yīng)用程序級(jí)別和子應(yīng)用程序級(jí)別具有可選的配置文件。子級(jí)別配置文件可用于替代更高級(jí)別的設(shè)置,或用于添加其他配置信息。盡管它提供了很高的靈活性,但有時(shí)候管理員希望加強(qiáng)配置設(shè)置,不允許他們被指定的應(yīng)用程序替代。例如,宿主網(wǎng)站的管理員希望指定代碼訪問(wèn)安全級(jí)別,不允許單個(gè)應(yīng)用程序更改它。結(jié)合使用 <location> 元素和 allowOverride 屬性可以實(shí)現(xiàn)這一目的。
例如,宿主網(wǎng)站的管理員希望確保所有應(yīng)用程序都不能調(diào)用非托管代碼。以下配置文件片段說(shuō)明管理員如何鎖定整個(gè)站點(diǎn)的代碼訪問(wèn)配置設(shè)置,并限制高信任級(jí)別的應(yīng)用程序(不允許調(diào)用非托管代碼):
<location path="somesitepath" allowOverride="false">
<trust level="high" originUrl="http://somesite.com"; />
</location>
path 屬性可以指向站點(diǎn)或虛擬目錄,它適用于指定目錄及其所有子目錄。在上面的示例中,如果將 allowOverride 設(shè)置為“假”,則能夠保護(hù)站點(diǎn)內(nèi)的所有應(yīng)用程序不被 <location> 元素中指定的配置設(shè)置替代。請(qǐng)注意,鎖定配置設(shè)置的功能適用于所有設(shè)置,而不僅限于信任級(jí)別這樣的安全設(shè)置。
有關(guān)詳細(xì)信息,請(qǐng)參閱:
.NET 中的安全性:使用公共語(yǔ)言運(yùn)行時(shí)限制代碼訪問(wèn)權(quán)限(英文)
代碼訪問(wèn)安全性(英文)
--------------------------------------------------------------------------------
通道安全性
通道通過(guò)遠(yuǎn)程處理邊界(如 AppDomains、進(jìn)程和計(jì)算機(jī))來(lái)傳輸信息。.NET 框架提供兩種遠(yuǎn)程處理通道:HTTP 和 TCP。
如果您希望保護(hù)通過(guò)這些協(xié)議傳輸?shù)臋C(jī)密或敏感信息,則需要考慮使用安全通道。除非信息沒(méi)有加密保護(hù),否則使用網(wǎng)絡(luò)監(jiān)視軟件很容易中途截獲和讀取這些信息。
以下是通道安全性的一些關(guān)鍵問(wèn)題:
承載于 IIS 和 ASP .NET 中的 HTTP 通道支持使用 SSL 傳送和接收安全數(shù)據(jù)。SSL 是設(shè)置安全通訊通道的最常用機(jī)制,可以在 IIS 內(nèi)配置。
如果您希望使用非安全通道(如 HTTP/端口 80 或 TCP),則仍然可以使用加密 API 手動(dòng)加密數(shù)據(jù)。
可以在傳輸層下實(shí)現(xiàn)通道安全機(jī)制。如果您使用 Windows 2000,則可以利用 Internet 協(xié)議安全性 (IPSec),在對(duì)應(yīng)用程序透明的同時(shí),達(dá)到保護(hù)數(shù)據(jù)傳輸?shù)哪康摹?
如果您使用 ASP .NET 和 COM 或 DCOM 組件,并使用 DCOM 作為您的遠(yuǎn)程處理機(jī)制,則可以考慮使用 DCOM 數(shù)據(jù)包保密身份驗(yàn)證級(jí)別來(lái)加密 DCOM 通訊。
有關(guān)詳細(xì)信息,請(qǐng)參閱:
《Microsoft Windows 2000 Server 資源包》中的“保護(hù) Web 通訊”,Microsoft Press
.NET 框架開(kāi)發(fā)人員規(guī)范(英文)中的遠(yuǎn)程處理規(guī)范
Microsoft Windows 2000 Server IP 安全性(英文)
MSDN 中的“設(shè)置 DCOM 和 NT 安全性”
--------------------------------------------------------------------------------
其他信息
要了解本文討論的安全問(wèn)題的其他信息,請(qǐng)參閱以下參考內(nèi)容。
《Microsoft Windows 2000 Server 資源包》中的“理解數(shù)字證書”,Microsoft Press
.NET 框架 SDK(英文)
Microsoft 知識(shí)庫(kù)文章 Q158229,信息:IIS 應(yīng)用程序的安全性部分(英文)
使用 Microsoft Windows 平臺(tái)創(chuàng)建網(wǎng)站的藍(lán)圖(英文)
有關(guān) Web 服務(wù)安全性的詳細(xì)信息,請(qǐng)參閱以下參考材料。
使用 SOAP 工具包保護(hù) Web 服務(wù)(英文)
《設(shè)計(jì)基于 Web 的 Microsoft Windows 2000 安全應(yīng)用程序》,Microsoft Press
Internet Information Services 5 安全性檢查表(英文)
Microsoft 知識(shí)庫(kù)文章 Q187506,運(yùn)行 IIS 站點(diǎn)所需的 NTFS 權(quán)限列表(英文)
有關(guān)安全性的一般信息,請(qǐng)參閱:
Microsoft 安全性(英文)