WSE3.0 用UserToken来进行身份验证
转载于http://www.cnblogs.com/jiekeng/archive/2006/11/08/554545.html,但是觉得很不错,就贴过来了。 ???主要是详细介绍使用WSE3.0建立使用安全的WebService
using
?System;
using ?System.Xml; using ?System.Security.Permissions; using ?Microsoft.Web.Services3.Security; using ?Microsoft.Web.Services3.Security.Tokens; /**/ ///?<summary> ///?UsernameTokenManager?的摘要说明 ///?</summary> public ? class ?CustomUsernameTokenManager?:?UsernameTokenManager { ????public?CustomUsernameTokenManagerr() ????{ ????} ????public?CustomUsernameTokenManager(XmlNodeList?nodes) ????????:?base(nodes) ????{ ????} ????protected?override?string?AuthenticateToken(UsernameToken?token) ????{ ????????byte[]?password?=?System.Text.Encoding.UTF8.GetBytes(token.Username); ????????Array.Reverse(password); ????????return?Convert.ToBase64String(password); ????} } 十、实现Web Service
using
?System;
using ?System.Web; using ?System.Web.Services; using ?System.Web.Services.Protocols; using ?Microsoft.Web.Services3; [WebService(Namespace? = ? " http://tempuri.org/ " )] [WebServiceBinding(ConformsTo? = ?WsiProfiles.BasicProfile1_1)] [Policy( " ServicePolicy " )] public ? class ?Service?:?System.Web.Services.WebService { ????public?Service?()?{ ????????//如果使用设计的组件,请取消注释以下行? ????????//InitializeComponent();? ????} ????[WebMethod] ????public?string?HelloWorld()?{ ????????return?"Hello?World"; ????} ???? }
using
?System;
using ?System.Collections.Generic; using ?System.Text; using ?Emp.localhost; using ?Microsoft.Web.Services3; using ?Microsoft.Web.Services3.Design; using ?Microsoft.Web.Services3.Security; using ?Microsoft.Web.Services3.Security.X509; using ?Microsoft.Web.Services3.Security.Tokens; namespace ?Emp { ????[Policy("ClientPolicy")]????????????????????????????????????????????????????????????//把“ClientPolicy”做为元数据定义 ????class?Program ????{ ????????static?void?Main(string[]?args) ????????{ ????????????ServiceWse?sw?=?new?ServiceWse();???????????????????????????????????????????//不是Service而是ServiceWse, ????????????UsernameToken?token?=?null;?????????????????????????????????????????????????//定义UsernameToken ????????????bool?useCorrectPassword?=?true;?????????????????????????????????????????????//?change?to?false,?and?the?call?will?fail ????????????string?username?=?Environment.UserName;?????????????????????????????????????//获取当前线程的用户?(你也可以自己定义) ????????????byte[]?passwordBytes?=?System.Text.Encoding.UTF8.GetBytes(username);????????//用户名的UTF8的格式? ????????????Array.Reverse(passwordBytes); ????????????if?(useCorrectPassword) ????????????{ ????????????????string?passwordEquivalent?=?Convert.ToBase64String(passwordBytes);??????//密码 ????????????????token?=?new?UsernameToken(username,?passwordEquivalent);????????????????//设置用户名和密码 ????????????} ????????????else ????????????{ ????????????????token?=?new?UsernameToken(username,?"BadPassword"); ????????????} ????????????sw.SetClientCredential(token);?????????????????????????????????????????????//提交客户端的令牌 ????????????sw.SetPolicy("ClientPolicy");??????????????????????????????????????????????//设置客户端证书 ????????????Console.WriteLine("Calling?{0}",?sw.Url); ????????????Console.WriteLine(sw.HelloWorld()); ????????????Console.WriteLine("Press?[Enter]?to?continue"); ????????????Console.ReadLine(); ????????} ????} } 十四、总结 原作者忘记了说如何把CustomUsernameTokenManager添加到WebConfig中。我就把它贴上吧 <microsoft.web.services3> ? 客户端用WebService引用只需要添加如下: using Microsoft.Web.Services3; 多的可以去除掉! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |