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