【W(wǎng)CF】使用“用戶名/密碼”驗(yàn)證的合理方法

我不敢說俺的方法是最佳方案,反正這世界上很多東西都是變動(dòng)的,正像老子所說的——“反(返)者,道之動(dòng)”。以往看到有些文章中說,為每個(gè)客戶端安裝證書嫌麻煩,就直接采用把用戶名和密碼塞在SOAP頭中發(fā)送,然后在服務(wù)器端自定義一個(gè)消息攔截器來驗(yàn)證用戶名和密碼。

以老周不靠譜的學(xué)識(shí)水平認(rèn)為,這樣做不好,直接把明文而且敏感信息放在SOAP頭中傳輸,這尺度實(shí)在太大了,太暴露了,廣電局是不會(huì)允許的,雖然現(xiàn)在流行穿得越少越好,但那些是婊子的境界。像用戶名密碼這些重要信息,怎么能直接傳輸呢,這很容易被偷窺的。

其實(shí),WCF并不要求客戶端必須安裝服務(wù)器證書。證書就好比身份證,用來標(biāo)識(shí)你的身份的,所以你不能拿著你外公的身份證去實(shí)名買火車票,除非售票的人是傻逼才會(huì)賣給你。

一般來說,傳輸層的安全是不需要提供證書的,但是消息安全是要求服務(wù)器提供證書的,客戶端可以以證書為憑據(jù),也可以不提供,即只對(duì)服務(wù)器有要求,客戶端可選擇其他憑據(jù),如Windows驗(yàn)證。經(jīng)過老周試驗(yàn),如果客戶端憑據(jù)為Windows,那么服務(wù)器也可以不設(shè)置證書的。不過,對(duì)用戶名/密碼驗(yàn)證方式,服務(wù)器必須提供證書。

說白了,根本不必為每個(gè)客戶端安裝服務(wù)器證書,完全不應(yīng)該把用戶名密碼放在Header里面,那樣太危險(xiǎn)。

 

說再多廢話意義不大,還是來個(gè)例子有用。

要實(shí)現(xiàn)自定義的用戶名密碼驗(yàn)證,需要實(shí)現(xiàn)一個(gè)抽象類——UserNamePasswordValidator。

復(fù)制代碼
    class CustUsernamepwdValidator : UserNamePasswordValidator
    { public override void Validate(string userName, string password)
        { if (userName != "
        		

網(wǎng)友評(píng)論