java wcf 未提供用户名_WCF安全之自定义用户名密码验证方式 | 学步园
概述
Windows Communication Foundation (WCF) 是 Microsoft 為構建面向服務的應用程序而提供的統一編程模型(摘自MSDN),在分布式環境下的安全問題尤為重要,如果你覺得使用了WCF默認的安全措施可以讓你高枕 無憂,那明天你可就以回家種田了,當然,對于學習來說,足夠了~,但我們講的是真正的項目應用,WCF在各種協議下的安全提供和保證是不盡相同的。
背景
在上一篇X509證書介紹后,相信大家對怎么使用X509證書在WCF的安全策略中有一定的了解,本章主要講述在WCF的消息安全模式下的服務器對客戶端基于自定義用戶名和密碼的身份驗證模式。當所有內置 UserNamePassword 驗證模式均不符合應用程序的要求時,你可以能過繼承
.UserNamePasswordValidator抽象類,并重寫其Validate方法來實現自己的用戶名密碼驗證程序,實際上,內置的用戶名密碼驗證方式比自定義的用戶名密碼驗證方式要可靠得多,因為自定義的用戶名密碼驗證程序任何人都可以構造,但是標準的用戶名密碼驗證方式剛是將用戶提供的用戶名密碼映射到windows賬戶,所以,如果映射失敗,意味著驗證不通過,以下示例在服務器端啟用自定義的用戶名密碼驗證程序,客戶端在調用服務前需要提供訪問服務所需要的用戶名密碼,并在EndpointIdenty中向服務器標識自己是合法用戶,具體標識參見本系列第二章:
開始吧
1、實現自定義用戶名密碼方式有哪些要求?
如上面的所講,首先,我們需要建立一個類,來繼承自
.UserNamePasswordValidator抽象類,并重其validate方法,代碼比較簡單,當然,這只是用于演示作用,如果是在實際的項目中,你完全可以將用戶名密碼存儲在持久化介質上,請看實現:
publicclassCustomUserPassword?:?UserNamePasswordValidator
{publicoverridevoidValidate(stringuserName,stringpassword)
{if(userName!="admin"||password!="admin")
{thrownewSecurityNegotiationException("驗證用戶名和密碼時,未通過檢測
");
}
}
}
2、配置安全策略和模式
你可以在代碼或者在配置文件中完成此安全策略實現過程,但是如果你是以代碼方式實現,做之前請參考Artech的文章:[原創]WCF技術剖析之八:ClientBase中對ChannelFactory的緩存機制
(請原諒我引用),配置文件實現如下:
//綁定配置//服務配置
在上面的過程中,我們的綁定配置中的安全策略必須是消息級別的安全,因為在傳輸級別中,是不提供用戶名密碼驗證方式的。兩種級別的的選擇比較主要體現在安全和效率上,如果你的傳輸效率上沒有什么問題,建議你選擇第四種安全策略:TransportWithMessageCredential,TransportWithMessageCredential的好處是既提供安全傳輸,又保證消息加密,多好!相對來說還是比較簡單的吧
3、證書的配置
啟用消息安全策略必須配置x509證書,如果你不配置,服務啟動將會收到一個異常:未提供安全證書。從上一章后,你也會覺得證書的配置都是比較簡單的吧。所以這里也不用過多的費話了。
4、客戶端調用服務
客戶端在調用服務前設置一個用戶名密碼(此用戶名密碼你可動態配置,具體怎么動態你隨意,可以是從持久介質上提取,也可以是用戶輸入),如下:
UserDataClient?client=newUserDataClient();
client.ClientCredentials.UserName.UserName="admin";
client.ClientCredentials.UserName.Password="admin";
UserExtension?usereE=client.GetUserExtension();
XElement?xe=client.GetUserExtensionXElement(null);
Console.WriteLine("調用成功,開始打印消息
.");
Console.ForegroundColor=ConsoleColor.Red;
Console.WriteLine("==================================");
Console.WriteLine(xe.Value);
5、調用成功,控制臺輸出調用信息
=============================================
后話:總體來說,自定義的用戶名密碼驗證程序還是比較簡單的,只是在效率上會有點問題。
說得不對的地方,歡迎拍磚!
總結
以上是生活随笔為你收集整理的java wcf 未提供用户名_WCF安全之自定义用户名密码验证方式 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python录入成绩储存程序_用Pyt
- 下一篇: java date 操作类_JAVA时间