監(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ù)開發(fā)人員感到頭疼的課題,那就是:如何使 IIS 和 ASP.NET Web 服務(wù)協(xié)同工作以提供安全性?,F(xiàn)在,我們通過 IIS 來(lái)處理安全問題,并通過 ASP.NET 進(jìn)行調(diào)節(jié)。ASP.NET 可以接受 IIS 提供的身份標(biāo)識(shí)信息并使用該信息來(lái)了解調(diào)用者是誰(shuí),或者利用代碼訪問安全性在 Web 服務(wù)上執(zhí)行特定操作。對(duì)于許多人而言,最大的問題是如何使 .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):

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

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

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

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

認(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í),建議您查找安裝了證書服務(wù)器的 Microsoft? Windows? 服務(wù)器,或者在可用的 Windows 服務(wù)器上安裝證書服務(wù)器。這將對(duì)理解本文有關(guān) SSL 的部分有所幫助。

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

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

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

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

在“打開”編輯框中,鍵入 inetmgr。

單擊“確定”。

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

為虛擬目錄或特定文件請(qǐng)求 SSL 就是在 IIS 中選擇正確的選項(xiàng)。要選擇“正確的選項(xiàng)”,請(qǐng)瀏覽到 IIS 管理控制臺(tái)中的虛擬目錄。如果您想為可以通過給定的虛擬目錄進(jì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)凇鞍踩ㄐ拧毕?,單擊“編輯”,將打開如圖 2 所示的“安全通信”對(duì)話框。

 

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

 

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

默認(rèn)情況下“需要安全通道 (SSL)”復(fù)選框沒有被選中,請(qǐng)選中該復(fù)選框以請(qǐng)求 SSL。SSL 支持 40 位和 128 位加密。加密使用的位數(shù)越多,破譯和找出原始位就越困難。這就是為特定的 .asmx 文件或整個(gè) Web 服務(wù)啟用 SSL 所要做的全部工作。這樣,只要 Web 服務(wù)器的證書不受威脅,所有 Web 服務(wù)客戶端和 Web 服務(wù)本身都將是安全的。SSL 使用包含公鑰的 X.509 證書,可能還包含一個(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 證書。上述任何一種身份驗(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)可,打開 Windows 身份驗(yàn)證是很關(guān)鍵的。這樣做的目的是使您的 Web 方法以調(diào)用者的身份運(yùn)行。所有記錄、訪問檢查等都是根據(jù)用戶的權(quán)限來(lái)執(zhí)行的。

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

 

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

“身份驗(yàn)證方法”對(duì)話框允許您配置用戶訪問虛擬目錄或文件的方法。要通過 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ā)送的。不過,也不全是這樣。實(shí)際上,用戶名和密碼是使用簡(jiǎn)單明文形式的 base64 編碼方法來(lái)發(fā)送的。如果您不熟悉 base64 編碼,可以使用二進(jìn)制數(shù)據(jù)并以文本形式提供這些數(shù)據(jù)。對(duì)數(shù)據(jù)進(jìn)行編碼時(shí),不使用機(jī)密/密鑰。如果選擇使用基本身份驗(yàn)證,則只能接受通過 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ù)器證書并建立會(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)過身份驗(yàn)證的用戶,請(qǐng)確保取消選中“匿名訪問”復(fù)選框。完成這一步后,您便可以在服務(wù)器端進(jìn)行以下操作:

搜索調(diào)用者。

使用代碼訪問安全性限制調(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)用程序。開始時(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();
}
}

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

 

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

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

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

為什么會(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() );

它允許代理訪問 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)訪問 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)填寫高速緩存,并使高速緩存針對(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)用編寫到 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)用者的方法是通過 SSL 執(zhí)行相互身份驗(yàn)證。SOAP 消息的發(fā)送者和接收者可以交換證書并互相驗(yàn)證。服務(wù)器如果具有 SSL 功能,則將具有證書。如果以相同的形式向客戶端簽發(fā)了證書,則客戶端也將具有證書。如果您已經(jīng)具有一個(gè)證書服務(wù)器,您需要給自己簽發(fā)一個(gè)證書,然后通過圖 2 所示的對(duì)話框?qū)⒆C書映射到您的用戶帳戶中。

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

 

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

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

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

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

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

選擇 c:tempsecSample.cer

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

“映射名”:HTTP 示例映射

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

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

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

然后,需要客戶證書,如圖 7 所示。

圖 7:需要 SSL 和客戶證書

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

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í),您也可以使用訪問控制列表 (ACL) 來(lái)確定那些用戶可以訪問目錄。一種查看文件或目錄的 ACL 的方法是使用 Windows 資源管理器。右鍵單擊文件,然后單擊“屬性”。在“安全性”選項(xiàng)卡中,您可以添加或刪除用戶和用戶組,也可以對(duì)這些用戶操作文件的權(quán)限進(jìn)行管理。

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

使用代碼訪問安全性

迄今為止,我們只討論了唯一識(shí)別用戶的方法。一旦我們知道用戶是誰(shuí),我們就可以使用這些信息來(lái)授權(quán)用戶訪問 Web 服務(wù)內(nèi)的一種或多種方法。示例用戶是 sseely2SampleGroup 組的成員。如果我想將對(duì) WhoAmI Web 方法的訪問權(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。更常見的情況是要求成員屬于某個(gè)特定組。這種技術(shù)提供了一種準(zhǔn)予或拒絕訪問特定 Web 方法的簡(jiǎn)單方法。使用代碼訪問安全性 - 當(dāng)保護(hù) .asmx 級(jí)的訪問時(shí),使用訪問控制列表是不夠的。   互操作性

如果在前面關(guān)于安全保護(hù)機(jī)制的論述中我沒有提到互操作性的話,可能是我疏忽了。如果您想使用非 Microsoft 工具包來(lái)訪問您的 Web 服務(wù),那么,最具互操作性且經(jīng)過良好測(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 證書。

小結(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ù)乃俣?。提高速度正?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在線咨詢