監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

HTTP安全性和ASP.NET Web服務(wù)

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

HTTP安全性和ASP.NET Web服務(wù)

摘要:目前,基于 HTTP 的安全機(jī)制是保證您的 Web 服務(wù)安全的最好方法。了解如何結(jié)合使用 Microsoft IIS 與 Microsoft ASP.NET 來(lái)保證 Web 服務(wù)的安全。

注意:本文假設(shè)您已經(jīng)比較熟悉如何配合使用 SSL 和 IIS。
  
簡(jiǎn)介
  
有一個(gè)一直讓 Web 服務(wù)開(kāi)發(fā)人員感到頭疼的課題,那就是:如何使 IIS 和 ASP.NET Web 服務(wù)協(xié)同工作以提供安全性?,F(xiàn)在,我們通過(guò) IIS 來(lái)處理安全問(wèn)題,并通過(guò) ASP.NET 進(jìn)行調(diào)節(jié)。ASP.NET 可以接受 IIS 提供的身份標(biāo)識(shí)信息并使用該信息來(lái)了解調(diào)用者是誰(shuí),或者利用代碼訪問(wèn)安全性在 Web 服務(wù)上執(zhí)行特定操作。對(duì)于許多人而言,最大的問(wèn)題是如何使 .NET 應(yīng)用程序利用內(nèi)置的 IIS 安全保護(hù)功能。在不遠(yuǎn)的將來(lái),WS-Security 將是您的更佳選擇。在那一天到來(lái)之前,HTTP 級(jí)的安全保護(hù)將是我們?cè)S多人用來(lái)保證信息安全的方法。

當(dāng)以安全的方式執(zhí)行 Web 方法時(shí),必須涉及以下各項(xiàng):

保密使偵聽(tīng)對(duì)話的實(shí)體不能直接看到數(shù)據(jù)。

完整性向接收者提供對(duì) SOAP 消息所作更改進(jìn)行檢測(cè)的能力。

身份驗(yàn)證回答“調(diào)用者是誰(shuí)”的問(wèn)題。

授權(quán)回答“調(diào)用者是否有權(quán)訪問(wèn)該 Web 方法”的問(wèn)題。

認(rèn)可證明所發(fā)生的操作,以防止客戶端在事務(wù)處理中欺詐或否認(rèn)。
  
這些安全保護(hù)功能常常是配合使用的。身份驗(yàn)證允許授權(quán)和認(rèn)可的發(fā)生。SSL 提供的保密措施也包括完整性和身份驗(yàn)證機(jī)制。本文假設(shè)您已經(jīng)比較熟悉如何配合使用 SSL 和 IIS。如果您不熟悉,請(qǐng)查看本文末尾的資源。同時(shí),建議您查找安裝了證書(shū)服務(wù)器的 Microsoft? Windows? 服務(wù)器,或者在可用的 Windows 服務(wù)器上安裝證書(shū)服務(wù)器。這將對(duì)理解本文有關(guān) SSL 的部分有所幫助。

使用 SSL 進(jìn)行加密和簽名
  
任何時(shí)候當(dāng)您需要對(duì)基于 HTTP 的 SOAP 消息進(jìn)行保密時(shí),都應(yīng)該通過(guò) SSL 運(yùn)行服務(wù)。它將對(duì)通過(guò)線路查看數(shù)據(jù)傳輸?shù)膶?shí)體隱藏 Web 服務(wù)中的數(shù)據(jù)。

為了使用本節(jié)中的數(shù)據(jù),在您的 Web 服務(wù)器的根目錄下必須安裝有 X.509 證書(shū)。。正確安裝證書(shū)后,您便可以為虛擬目錄或特定文件選擇強(qiáng)制執(zhí)行 SSL 身份驗(yàn)證。

  
打開(kāi) Internet Information Services 管理控制臺(tái)的步驟

在“開(kāi)始”菜單中單擊“運(yùn)行”。

在“打開(kāi)”編輯框中,鍵入 inetmgr。

單擊“確定”。

這樣,IIS 管理控制臺(tái)就打開(kāi)了。

為虛擬目錄或特定文件請(qǐng)求 SSL 就是在 IIS 中選擇正確的選項(xiàng)。要選擇“正確的選項(xiàng)”,請(qǐng)瀏覽到 IIS 管理控制臺(tái)中的虛擬目錄。如果您想為可以通過(guò)給定的虛擬目錄進(jìn)行訪問(wèn)的所有 Web 服務(wù)請(qǐng)求 SSL,請(qǐng)右鍵單擊該虛擬目錄,單擊“屬性”,然后單擊“目錄安全性”選項(xiàng)卡。

如果只保護(hù)某個(gè)特定的 Web 服務(wù),請(qǐng)右鍵單擊與該 Web 服務(wù)關(guān)聯(lián)的 .asmx 文件,單擊“屬性”,然后單擊“文件安全性”選項(xiàng)卡。不管執(zhí)行哪個(gè)步驟,您都將看到一個(gè)與圖 1 類似的對(duì)話框。請(qǐng)?jiān)凇鞍踩ㄐ拧毕拢瑔螕簟熬庉嫛?,將打開(kāi)如圖 2 所示的“安全通信”對(duì)話框。

 

圖 1:IIS 管理控制臺(tái)中的“安全性”選項(xiàng)卡

 

圖 2:“安全通信”對(duì)話框

默認(rèn)情況下“需要安全通道 (SSL)”復(fù)選框沒(méi)有被選中,請(qǐng)選中該復(fù)選框以請(qǐng)求 SSL。SSL 支持 40 位和 128 位加密。加密使用的位數(shù)越多,破譯和找出原始位就越困難。這就是為特定的 .asmx 文件或整個(gè) Web 服務(wù)啟用 SSL 所要做的全部工作。這樣,只要 Web 服務(wù)器的證書(shū)不受威脅,所有 Web 服務(wù)客戶端和 Web 服務(wù)本身都將是安全的。SSL 使用包含公鑰的 X.509 證書(shū),可能還包含一個(gè)私鑰。如果私鑰被外部用戶知道,則使用公鑰加密的通信就可能會(huì)被外部用戶偵測(cè)到,從而變得不安全。

一旦您將資源設(shè)置為通信時(shí)需要 SSL,則發(fā)送者和接收者之間傳送的信息就將被加密并簽名。也就是說(shuō),外部用戶將無(wú)法閱讀消息的內(nèi)容。如果外部用戶改變了消息的字節(jié)數(shù),消息接收者可以檢測(cè)到更改。

身份驗(yàn)證
  
為了利用 IIS 給您提供的身份驗(yàn)證,您需要編輯與您的 Web 服務(wù)關(guān)聯(lián)的 Web.config 文件。要使用戶的身份在 HttpContext 中可用,您需要將 /configuration/system.web/authentication/@mode 屬性設(shè)置為 Windows。當(dāng) IIS 使用以下身份驗(yàn)證方式之一時(shí),必須設(shè)置模式屬性:基本、簡(jiǎn)要、集成 Windows 身份驗(yàn)證 (NTLM/Kerberos) 或 X.509 證書(shū)。上述任何一種身份驗(yàn)證提供的用戶憑據(jù)都必須映射回本地計(jì)算機(jī)或 Active Directory 中的用戶。

IIS 和正確的 Web.config 設(shè)置結(jié)合使用將使 Web 服務(wù)能夠發(fā)現(xiàn)調(diào)用者的身份標(biāo)識(shí)。作為新增的優(yōu)點(diǎn),請(qǐng)求上下文將假設(shè)調(diào)用者的身份。如果要利用 Windows 身份驗(yàn)證,Web.config 文件應(yīng)該如下所示:

<configuration>
<system.web>
<authentication mode="Windows" />
<!-- 其他元素將放在此處 -->
</system.web>
</configuration>

為了處理身份驗(yàn)證、審核和認(rèn)可,打開(kāi) Windows 身份驗(yàn)證是很關(guān)鍵的。這樣做的目的是使您的 Web 方法以調(diào)用者的身份運(yùn)行。所有記錄、訪問(wèn)檢查等都是根據(jù)用戶的權(quán)限來(lái)執(zhí)行的。

為了強(qiáng)制 IIS 提供調(diào)用者的身份標(biāo)識(shí),您需要告訴 IIS 關(guān)閉匿名訪問(wèn)。就是這么簡(jiǎn)單,真的。要執(zhí)行此操作,請(qǐng)返回并打開(kāi) inetmgr(單擊“開(kāi)始”->“運(yùn)行”,然后鍵入 inetmgr)。瀏覽到所需的虛擬目錄。右鍵單擊虛擬目錄或 .asmx 文件(這取決于您需要對(duì)虛擬目錄中的所有文件實(shí)施身份標(biāo)識(shí)還是僅對(duì)一個(gè) Web 服務(wù)實(shí)施身份標(biāo)識(shí)),然后單擊“屬性”。單擊“目錄安全性”選項(xiàng)卡,如圖 1 所示。在“匿名訪問(wèn)和驗(yàn)證控制”中,單擊“編輯”。將打開(kāi)如圖 3 所示的“身份驗(yàn)證方法”對(duì)話框。

 

圖 3:禁用匿名訪問(wèn)的“身份驗(yàn)證方法”對(duì)話框

“身份驗(yàn)證方法”對(duì)話框允許您配置用戶訪問(wèn)虛擬目錄或文件的方法。要通過(guò) HTTP 信息頭傳遞用戶憑據(jù),您可以使用基本或簡(jiǎn)要身份驗(yàn)證。基本和簡(jiǎn)要身份驗(yàn)證均不提供任何確保消息安全的機(jī)制。傳遞用戶憑據(jù)的機(jī)制由 RFC 2617: HTTP Authentication: Basic and Digest Access Authentication定義?;旧?,使用一個(gè)名為 Authorization 的 HTTP 信息頭來(lái)傳遞用戶名和密碼。對(duì)于基本身份驗(yàn)證而言,用戶名/密碼組合是以明文的方式發(fā)送的。不過(guò),也不全是這樣。實(shí)際上,用戶名和密碼是使用簡(jiǎn)單明文形式的 base64 編碼方法來(lái)發(fā)送的。如果您不熟悉 base64 編碼,可以使用二進(jìn)制數(shù)據(jù)并以文本形式提供這些數(shù)據(jù)。對(duì)數(shù)據(jù)進(jìn)行編碼時(shí),不使用機(jī)密/密鑰。如果選擇使用基本身份驗(yàn)證,則只能接受通過(guò) SSL 的憑據(jù)。這可以保護(hù) Web 服務(wù)和調(diào)用者免受試圖攻擊通道以捕獲有效憑據(jù)集的實(shí)體的威脅。

還可以使用簡(jiǎn)要身份驗(yàn)證。如果選擇此選項(xiàng),您必須了解,許多 SOAP 工具包都不支持簡(jiǎn)要身份驗(yàn)證。因而,可以使用 Web 服務(wù)的工具包數(shù)量將受到限制。如果想知道調(diào)用者的身份,而目標(biāo) SOAP 工具包支持簡(jiǎn)要身份驗(yàn)證并且 SOAP 消息的內(nèi)容不是特別重要,則請(qǐng)使用簡(jiǎn)要身份驗(yàn)證。簡(jiǎn)要身份驗(yàn)證使用名為 nonce 的共享機(jī)密為調(diào)用者的憑據(jù)進(jìn)行加密。

基本和簡(jiǎn)要身份驗(yàn)證都使用質(zhì)詢-響應(yīng)機(jī)制。正因?yàn)槿绱?,?Web 方法調(diào)用發(fā)生之前,客戶端和接收器之間將發(fā)送多次請(qǐng)求和響應(yīng)。在基本身份驗(yàn)證中,質(zhì)詢和響應(yīng)的速度都相當(dāng)快。事實(shí)上,如果客戶端知道需要基本身份驗(yàn)證,它會(huì)提早提供基本憑據(jù)。這種提速可以是需要驗(yàn)證服務(wù)器證書(shū)并建立會(huì)話密鑰的、基于 SSL 的連接中的臨界值。在簡(jiǎn)要身份驗(yàn)證中,在憑據(jù)被加密前,需要交換 nonce。同樣,在 Web 服務(wù)代碼被執(zhí)行之前需要執(zhí)行一些握手操作。

要針對(duì) Web 服務(wù)強(qiáng)制啟用這些項(xiàng),只需要在“身份驗(yàn)證方法”對(duì)話框中選中相應(yīng)的框即可。如果您確認(rèn)只需要獲取已經(jīng)過(guò)身份驗(yàn)證的用戶,請(qǐng)確保取消選中“匿名訪問(wèn)”復(fù)選框。完成這一步后,您便可以在服務(wù)器端進(jìn)行以下操作:

搜索調(diào)用者。

使用代碼訪問(wèn)安全性限制調(diào)用者可以調(diào)用的方法。
  
以下 Web 服務(wù)返回當(dāng)前的調(diào)用者信息:

[WebMethod]
public string WhoAmI() {
return "正在作為用戶運(yùn)行: " +
Thread.CurrentPrincipal.Identity.Name;
}

我們將修改一個(gè)調(diào)用該 Web 服務(wù)的簡(jiǎn)單的控制臺(tái)應(yīng)用程序。開(kāi)始時(shí),客戶端如下所示:

static void Main(string[] args) {
localhost.Sample svc = new localhost.Sample();
try {
Console.WriteLine( svc.WhoAmI() );
} catch ( Exception ex ) {
Console.WriteLine( ex.ToString() );
} finally {
svc.Dispose();
}
}

如果沒(méi)有對(duì) Web 服務(wù)/應(yīng)用程序應(yīng)用安全保護(hù),Main 函數(shù)將打印以下信息:

 

圖 4:無(wú)安全保護(hù)運(yùn)行,因而也沒(méi)有身份標(biāo)識(shí)

如果您通過(guò)圖 3 中的對(duì)話框關(guān)閉匿名訪問(wèn),客戶端將無(wú)法訪問(wèn) Web 服務(wù)。相反,將顯示以下錯(cuò)誤消息:

System.Net.WebException: 請(qǐng)求失敗,HTTP 狀態(tài) 401: 訪問(wèn)被拒絕。

為什么會(huì)是這樣呢?默認(rèn)情況下,Web 服務(wù)代理不包含任何關(guān)于調(diào)用者或要傳遞的憑據(jù)的信息。因?yàn)椴荒茯?yàn)證自己的身份,調(diào)用 Web 方法的嘗試失敗,并且引發(fā)異常。如果您想為當(dāng)前用戶傳遞正確的憑據(jù),最簡(jiǎn)單的方法是沿著當(dāng)前用戶的默認(rèn)憑據(jù)傳遞。客戶端中的 try 塊需要進(jìn)行修改才能讀?。?/FONT>

svc.Credentials =
System.Net.CredentialCache.DefaultCredentials;
Console.WriteLine( svc.WhoAmI() );

它允許代理訪問(wèn) Web 方法,因?yàn)樗梢詳y帶當(dāng)前用戶的憑據(jù)并將其提供給質(zhì)詢時(shí)的 Web 方法。Web 服務(wù)返回以下結(jié)果:

作為以下用戶運(yùn)行 : REDMONDsseely

這將同時(shí)使用基本和簡(jiǎn)要身份驗(yàn)證。身份驗(yàn)證信息只對(duì)一個(gè) Web 服務(wù)調(diào)用有效。換句話說(shuō),Web 服務(wù)代碼不能調(diào)用其他 Web 服務(wù),不能使用這些機(jī)制扮演調(diào)用者。請(qǐng)記住,如果您選擇基本身份驗(yàn)證,則還應(yīng)該為該文件請(qǐng)求一個(gè) SSL 連接,以避免用戶的身份被泄漏給監(jiān)視連接的實(shí)體。有時(shí),您可能需要使用不同于當(dāng)前用戶的身份標(biāo)識(shí)來(lái)訪問(wèn) Web 服務(wù)。那該怎么做呢?您可以“手動(dòng)”設(shè)置憑據(jù)。

假設(shè)在本地 Web 服務(wù)器 sseely2 上有一個(gè)用戶名為 Example,其密碼為 Test$123。要手動(dòng)設(shè)置憑據(jù),必須創(chuàng)建一個(gè) CredentialCache。使用 CredentialCache 的代碼需要使用 NetworkCredential 對(duì)象填充高速緩存。當(dāng)向高速緩存添加 NetworkCredential 時(shí),代碼需要指定返回指定憑據(jù)時(shí)所使用的 URL/身份驗(yàn)證組合類型。有可能使用多個(gè)站點(diǎn)的標(biāo)識(shí)信息來(lái)填寫(xiě)高速緩存,并使高速緩存針對(duì)各站點(diǎn)和身份驗(yàn)證類型智能地返回正確的憑據(jù)。要將高速緩存設(shè)置為針對(duì)來(lái)自 Web 服務(wù)的基本身份驗(yàn)證質(zhì)詢發(fā)送正確的憑據(jù),請(qǐng)使用以下代碼:

localhost.Sample svc = new localhost.Sample(); try { CredentialCache credCache = new CredentialCache(); NetworkCredential netCred = new NetworkCredential( "Example", "Test$123", "sseely2" ); credCache.Add( new Uri(svc.Url), "Basic", netCred ); svc.Credentials = credCache; Console.WriteLine( svc.WhoAmI() );

當(dāng)在 URL 中傳遞,以在包含 credCache.Add 的行上使用時(shí),您會(huì)發(fā)現(xiàn) URL 是從 Web 服務(wù)中得到的,而不是被硬編碼或從其他源獲取的。我喜歡用這種方法將調(diào)用編寫(xiě)到 Add 方法中,因?yàn)檫@樣最省事,又可以保證 Web 服務(wù)端點(diǎn)和調(diào)用 Add 所使用的端點(diǎn)相同。

如果您想為簡(jiǎn)要身份驗(yàn)證使用相同的憑據(jù),則向憑據(jù)高速緩存添加信息的行將讀?。?/FONT>

credCache.Add( new Uri(svc.Url), "Digest", netCred );

基本身份驗(yàn)證將對(duì)在本地計(jì)算機(jī)注冊(cè)或在目錄中注冊(cè)的用戶起作用。簡(jiǎn)要身份驗(yàn)證只接受在信任的 Windows 域中注冊(cè)的用戶。

另一種驗(yàn)證 Web 服務(wù)調(diào)用者的方法是通過(guò) SSL 執(zhí)行相互身份驗(yàn)證。SOAP 消息的發(fā)送者和接收者可以交換證書(shū)并互相驗(yàn)證。服務(wù)器如果具有 SSL 功能,則將具有證書(shū)。如果以相同的形式向客戶端簽發(fā)了證書(shū),則客戶端也將具有證書(shū)。如果您已經(jīng)具有一個(gè)證書(shū)服務(wù)器,您需要給自己簽發(fā)一個(gè)證書(shū),然后通過(guò)圖 2 所示的對(duì)話框?qū)⒆C書(shū)映射到您的用戶帳戶中。

如果您確實(shí)有可用的證書(shū),則可以通過(guò)控制面板中的“Internet 選項(xiàng)”小程序訪問(wèn)這些證書(shū)。訪問(wèn)此小程序的最簡(jiǎn)便的方法是通過(guò) Microsoft? Internet Explorer。如果您沒(méi)有安裝證書(shū),而現(xiàn)在想獲取一個(gè)。只需打開(kāi) Internet Explorer,瀏覽到已安裝證書(shū)服務(wù)器的 Windows 服務(wù)器。您所需的 URL 為 http://machine_name/certsrv。按照屏幕上的說(shuō)明來(lái)請(qǐng)求和安裝客戶證書(shū)。下一步,在 Internet Explorer 的“工具”菜單中,單擊“Internet 選項(xiàng)”,單擊“內(nèi)容”選項(xiàng)卡,然后單擊“證書(shū)”。將顯示一個(gè)與圖 5 類似的對(duì)話框。

 

圖 5:“證書(shū)”對(duì)話框

您需要導(dǎo)出一個(gè)證書(shū),以便可以被 Web 服務(wù)代理身份驗(yàn)證使用。要導(dǎo)出證書(shū),請(qǐng)單擊“導(dǎo)出”打開(kāi)“證書(shū)導(dǎo)出向?qū)А?。在向?qū)е?,單擊“下一步”接受所有默認(rèn)選項(xiàng),然后選擇一個(gè)寫(xiě)入證書(shū)的文件名。在我的示例中,我將證書(shū)保存到 c:tempsecSample.cer 中。單擊“下一步”,然后單擊“完成”。現(xiàn)在,我們需要將該證書(shū)與某個(gè)特定用戶關(guān)聯(lián)起來(lái)。

重復(fù)執(zhí)行請(qǐng)求 SSL 所需的步驟,以確保一個(gè)或所有 Web 服務(wù)的安全。

選擇“啟用客戶證書(shū)映射”復(fù)選框,并單擊“編輯”。

在“一對(duì)一映射”選項(xiàng)卡上,單擊“添加”。

選擇 c:tempsecSample.cer

在“映射到帳戶”對(duì)話框中,設(shè)置以下各項(xiàng):

“映射名”:HTTP 示例映射

“帳戶”:選擇一個(gè)用戶帳戶。在我的示例中,我選擇的是 sseely2Example。

“密碼”:映射到帳戶密碼。在我的示例中,我輸入的是 Test$123。

如果證書(shū)身份和與證書(shū)關(guān)聯(lián)的身份不匹配,那沒(méi)有關(guān)系。將證書(shū)匹配到身份標(biāo)識(shí)時(shí),服務(wù)器只在存儲(chǔ)區(qū)中查找與接收到的證書(shū)完全匹配的另一個(gè)證書(shū)。為什么是這樣呢?個(gè)人也可能具有由公共證書(shū)頒發(fā)機(jī)構(gòu)簽發(fā)的客戶證書(shū)。使用 SSL 客戶身份驗(yàn)證時(shí),服務(wù)器可以將證書(shū)映射到主機(jī)中的某個(gè)身份標(biāo)識(shí),而不需要與證書(shū)頒發(fā)者以任何方式發(fā)生關(guān)聯(lián)。   

單擊以確認(rèn)密碼,再單擊三次“確定”關(guān)閉對(duì)話框。
  
現(xiàn)在,您需要在 IIS 中設(shè)置其他選項(xiàng)。首先需要清除所有可用的身份驗(yàn)證方法,以確保受保護(hù)的資源(.asmx 文件或虛擬目錄)具有圖 6 所示的權(quán)限設(shè)置。

 

圖 6:所有身份驗(yàn)證方法都被清除

然后,需要客戶證書(shū),如圖 7 所示。

圖 7:需要 SSL 和客戶證書(shū)

最后,需要對(duì)客戶端進(jìn)行配置,以從文件加載證書(shū)并提交給 Web 服務(wù)。System.Security.Cryptography.X509Certificates.X509Certificate 類知道如何讀取 X.509 證書(shū)。要加載證書(shū)并使其可以被 Web 服務(wù)使用,請(qǐng)讀入證書(shū),并將其添加到代理的客戶證書(shū)集合中。

static void Main(string[] args) { localhost.Sample svc = new localhost.Sample(); try { X509Certificate x509 = X509Certificate.CreateFromCertFile( @"c:tempsecSample.cer"); svc.ClientCertificates.Add( x509 ); Console.WriteLine( svc.WhoAmI() ); } catch ( Exception ex ) { Console.WriteLine( ex.ToString() ); } finally { svc.Dispose(); } }

正如所料,輸出為:

作為以下用戶運(yùn)行 : SSEELY2example

使用基本/簡(jiǎn)要身份驗(yàn)證或 X.509 驗(yàn)證用戶身份時(shí),您也可以使用訪問(wèn)控制列表 (ACL) 來(lái)確定那些用戶可以訪問(wèn)目錄。一種查看文件或目錄的 ACL 的方法是使用 Windows 資源管理器。右鍵單擊文件,然后單擊“屬性”。在“安全性”選項(xiàng)卡中,您可以添加或刪除用戶和用戶組,也可以對(duì)這些用戶操作文件的權(quán)限進(jìn)行管理。

您并不是任何時(shí)候都希望將 Web 服務(wù)的用戶添加到 Active Directory。相反,將這些信息保存在別處可能更可取。要解決此問(wèn)題,通常使用下面兩種方法:第一種方法常用于安全 Web 站點(diǎn),是向每個(gè)用戶簽發(fā)一個(gè)用戶名和密碼,然后通過(guò) SOAP 信息頭和其他機(jī)制傳遞這些憑據(jù)。Cold Storage 示例使用自定義 SOAP 信息頭和 HTTP 模塊來(lái)提供身份驗(yàn)證。另一種方法是創(chuàng)建一個(gè)自定義登錄 Web 服務(wù)。此處,調(diào)用者通過(guò) SSL 等安全通道登錄,并接收一個(gè)令牌以在調(diào)用 Web 服務(wù)上的其他方法時(shí)使用。

使用代碼訪問(wèn)安全性

迄今為止,我們只討論了唯一識(shí)別用戶的方法。一旦我們知道用戶是誰(shuí),我們就可以使用這些信息來(lái)授權(quán)用戶訪問(wèn) Web 服務(wù)內(nèi)的一種或多種方法。示例用戶是 sseely2SampleGroup 組的成員。如果我想將對(duì) WhoAmI Web 方法的訪問(wèn)權(quán)限限制在該組成員范圍內(nèi),則可以應(yīng)用 System.Security.Permissions.PrincipalPermissionAttribute 屬性。具體來(lái)說(shuō),我將使用以下代碼:

[WebMethod]
[PrincipalPermissionAttribute(SecurityAction.Demand,
Authenticated=true,
Name=@"sseely2Example",
Role=@"sseely2SampleGroup")]
public string WhoAmI() {
return "作為以下用戶運(yùn)行: " +
Thread.CurrentPrincipal.Identity.Name;
}

上面的代碼有點(diǎn)極端。它要求知道調(diào)用者的 ID,要求調(diào)用者屬于 sseely2SampleGroup 組并且調(diào)用者的名稱為 sseely2Example。更常見(jiàn)的情況是要求成員屬于某個(gè)特定組。這種技術(shù)提供了一種準(zhǔn)予或拒絕訪問(wèn)特定 Web 方法的簡(jiǎn)單方法。使用代碼訪問(wèn)安全性 - 當(dāng)保護(hù) .asmx 級(jí)的訪問(wèn)時(shí),使用訪問(wèn)控制列表是不夠的。   互操作性

如果在前面關(guān)于安全保護(hù)機(jī)制的論述中我沒(méi)有提到互操作性的話,可能是我疏忽了。如果您想使用非 Microsoft 工具包來(lái)訪問(wèn)您的 Web 服務(wù),那么,最具互操作性且經(jīng)過(guò)良好測(cè)試的安全機(jī)制是使用基本身份驗(yàn)證來(lái)識(shí)別調(diào)用者和 SSL 的身份以加密通道。將此機(jī)制與集成 Windows 身份驗(yàn)證配合使用時(shí),您需要向 Web 服務(wù)器用戶或相應(yīng)的 Windows 域控制器添加用戶名和密碼。原因很簡(jiǎn)單:許多 Web 服務(wù)堆棧不包括理解如何處理簡(jiǎn)要身份驗(yàn)證的 HTTP 部分。許多情況下,SSL/SOAP 組合可能不支持發(fā)送客戶端 X.509 證書(shū)。

小結(jié)
  
您可以結(jié)合使用 IIS 和 ASP.NET 中的功能來(lái)確保 Web 服務(wù)的安全。ASP.NET Web 服務(wù)使用一個(gè)憑據(jù)式高速緩存來(lái)響應(yīng)各種類型的身份驗(yàn)證請(qǐng)求。基本/簡(jiǎn)要身份驗(yàn)證和 SSL 都具有相同的缺點(diǎn):

它們要求在安全地發(fā)送消息之前在 SOAP 消息發(fā)送者和接收者之間交換消息。此握手機(jī)制會(huì)限制 SOAP 消息傳輸?shù)乃俣取L岣咚俣日?WS-Security 規(guī)范的動(dòng)機(jī)之一。WS-Security 放棄了以消息為中心的安全保護(hù)模式的傳輸協(xié)議技術(shù)。在 WS-Security 被廣泛理解和部署之前,基于 HTTP 的安全機(jī)制是保證 Web 服務(wù)安全的最好方法。

發(fā)布:2007-03-25 10:37    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章:
上海OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢