WCF客戶端驗(yàn)證不同方式簡(jiǎn)介
WCF開(kāi)發(fā)插件中,對(duì)于安全的相關(guān)操作時(shí)一個(gè)比較重要的應(yīng)用技巧。在這篇文章中,我們將會(huì)針對(duì)WCF客戶端驗(yàn)證的各種方法進(jìn)行一個(gè)詳盡的介紹,以方便大家對(duì)此的了解,加深對(duì)這方面的認(rèn)知程度。#t#
WCF與現(xiàn)有的Windows平臺(tái)上的身份驗(yàn)證機(jī)制很好地結(jié)合以外,還支持WS-Security安全規(guī)范,以及用戶定制擴(kuò)展驗(yàn)證模式,安全令牌方式。如果你關(guān)注過(guò)WSE3.0相關(guān)的技術(shù)文章,一定感覺(jué)不會(huì)陌生,這些安全機(jī)制在WSE3.0中已經(jīng)完全支持。這些都是WCF聲稱(chēng)繼承WSE安全機(jī)制的最好證明。延續(xù)微軟平臺(tái)的的一貫做法。優(yōu)秀模型的復(fù)用與擴(kuò)展。關(guān)于安全的概念可以再參考WSE3.0構(gòu)建Web服務(wù)安全(1):WSE3.0安全機(jī)制與實(shí)例開(kāi)發(fā)。
WCF客戶端驗(yàn)證之(1)None:客戶端為匿名客戶端。在這種情況下,每個(gè)客戶端擁有一個(gè)自己的證書(shū),比如身份證。服務(wù)會(huì)使用證書(shū)來(lái)確保服務(wù)客戶端的標(biāo)識(shí)。我們經(jīng)常使用HTTPS 訪問(wèn)網(wǎng)站,比如登陸一些安全級(jí)別較高的網(wǎng)站情況類(lèi)似,或者使用網(wǎng)上銀行時(shí)候,你的客戶端證書(shū)就會(huì)起到鑒別客戶端的作用。
WCF客戶端驗(yàn)證之(2)UserName:客戶端將提供用戶名和密碼。在這種情況下,服務(wù)會(huì)使用證書(shū)向客戶端驗(yàn)證其標(biāo)識(shí)。另外就是證書(shū)還將用加密客戶端的用戶名和密碼,保證消息在傳輸過(guò)程中的安全。這個(gè)方式也是常見(jiàn)的加密方式。我會(huì)在后續(xù)文章里給出實(shí)現(xiàn)代碼。
WCF客戶端驗(yàn)證之(3)Windows:需要Windows AD支持。一般使用在企業(yè)局域網(wǎng)內(nèi)部??蛻舳撕头?wù)都會(huì)使用 Windows 帳戶進(jìn)行身份驗(yàn)證。Windows Communication Foundation 將會(huì)就 Kerberos 或 NTLM 進(jìn)行協(xié)商,如果存在域,則優(yōu)先選擇 Kerberos(NTLM 實(shí)際上不會(huì)向客戶端驗(yàn)證服務(wù)的身份,而只會(huì)向服務(wù)驗(yàn)證客戶端的身份)。如果您想要使用 Kerberos,則必須讓客戶端根據(jù)配置中的服務(wù)主體名稱(chēng)驗(yàn)證服務(wù)的身份。如果您要在域環(huán)境中為客戶端構(gòu)建服務(wù),您應(yīng)明確地為其提供發(fā)送 Windows 賬號(hào)的選項(xiàng)。
WCF客戶端驗(yàn)證之(4)Certificate:服務(wù)將具有一個(gè)證書(shū)(客戶端的公鑰),客戶端也具有一個(gè)其自己的證書(shū)(服務(wù)端的公鑰)。當(dāng)客戶端向服務(wù)端發(fā)送消息時(shí),使用證書(shū)加密消息,服務(wù)端使用私鑰解密。反之亦然。證書(shū)就是包含公鑰,證書(shū)標(biāo)識(shí),主題,指紋,簽名算法等的一個(gè)文件。
WCF客戶端驗(yàn)證之(5)IssuedToken:安全令牌的概念在WSE3.0里曾經(jīng)涉及到。它允許您的服務(wù)從安全性令牌服務(wù) (STS) 接受一組簽名的聲明。因?yàn)樗梢詥⒂寐?lián)合標(biāo)識(shí)方案和 InfoCard。當(dāng)您與某個(gè)合作伙伴組織聯(lián)合時(shí),您將允許該合作伙伴通過(guò)任何合適的技術(shù)對(duì)其自己的用戶進(jìn)行身份驗(yàn)證。在最理想的情況下,這將允許該合作伙伴組織中的用戶通過(guò)單一登錄使用您的服務(wù),即便他們并不與您使用同一個(gè) Active Directory 域,或不受您的信任。該合作伙伴組織中的用戶需要使用 STS 進(jìn)行身份驗(yàn)證,而 STS 可以發(fā)出一個(gè)簽名的安全聲明標(biāo)記語(yǔ)言 (Security Assertion Markup Language, SAML) 令牌。您既可以直接接受該令牌,也可以要求將該令牌呈送給您組織中的 STS,以便讓其評(píng)估該合作伙伴的聲明,并發(fā)出第二個(gè)您可以使用的 SAML 令牌。理解起來(lái)有點(diǎn)復(fù)雜。實(shí)際也是一個(gè)標(biāo)識(shí),鑒別客戶端的一個(gè)標(biāo)識(shí)。就是一種更加靈活的身份驗(yàn)證方式。
好比你現(xiàn)在使用中國(guó)護(hù)照,有一天突然聯(lián)合國(guó)實(shí)現(xiàn)了一種新的護(hù)照,全球統(tǒng)一護(hù)照,你可以進(jìn)入任何一個(gè)國(guó)家,即使你在中國(guó)辦理,但是其他國(guó)家可以再你落地的時(shí)候驗(yàn)證你的護(hù)照的有效性。然后告訴其他國(guó)家,共享著這次驗(yàn)證的結(jié)果。你的護(hù)照就是令牌。需要后續(xù)鑒別的身份證明。Issued這個(gè)單詞的作用就在這里。需要鑒別的令牌。
UserName方式容易實(shí)現(xiàn),但是在WCF框架下需要使用服務(wù)證書(shū),這個(gè)是相對(duì)WSE3.0改變的地方。如果結(jié)合證書(shū)使用的話,會(huì)使的這種方式適合在Internet中使用。安全性較高。適合對(duì)發(fā)布到Internet的WCF服務(wù)常見(jiàn)的身份驗(yàn)證方式。X.509證書(shū)驗(yàn)證方式相對(duì)嚴(yán)謹(jǐn),要求客戶端提供有效的證書(shū)憑證,也就是每個(gè)客戶端都要維護(hù)一個(gè)自己的證書(shū),調(diào)用服務(wù)前,通過(guò)SOAP消息傳遞到WCF服務(wù),WCF進(jìn)行身份驗(yàn)證。這個(gè)需要CA支持?;蛘咝枰暾?qǐng)第三方商業(yè)證書(shū)。
定制方式也比較常見(jiàn),用戶根據(jù)需要定制自己的身份驗(yàn)證機(jī)制,如指紋,基因等技術(shù)。來(lái)代替現(xiàn)有的WCF客戶端驗(yàn)證之方式。