none
Web Services Enhancements 3.0 Quick Start(四) RRS feed

  • 常规讨论

  • 主要是详细介绍使用WSE3.0建立使用安全的WebService 一、下载WSE3.0,并安装,特别要提的是选择安装的时候选择vs2005开发人员的模式 下载 二、一些理论的知识,可参考控制台关于安全证书的帮助,了解一些必要的基础知识 三、了解两个工具 certmgr.exe http://msdn2.microsoft.com/zh-cn/library/bfsktky3.aspx makecert.exe http://msdn2.microsoft.com/zh-cn/library/e78byta0.aspx 四、建立服务器和客户端的证书,在下载示例中(Setup.bat)注意应使用“Visual Studio 2005 命令提示” 五、建立一个WebService和一个客户端调用控制台程序 六、设置WebService配置文件 1、在WebService工程中右键选择WSE settings 2、选择“Enable this for Web Service Enhancement”和“Enable Microsoft Web Service EnhanCement Soap Protocol Factory” 3、选择Policy tab 选择 Enable Policy 并点击Add.. 4、填写Policy名称,下一步 5、选择“Secure a service application” 在选择客户端访问方式中选择“Username”下一步 6、选择“Sign and Encrypt” 下一步 7、选择“Select Certificate..” 8、选择“WSEQuickStartServer”证书,下一步 9、完成 七、就能生成web.config和wse3policyCache.config 八、添加 Microsoft.Web.Services3.dll的引用,并在WebSerice类中添加[Policy("ServicePolicy")] 九、在App_Code中添加CustomUsernameTokenManager类,实现UsernameTokenManager接口 using System; using System.Xml; using System.Security.Permissions; using Microsoft.Web.Services3.Security; using Microsoft.Web.Services3.Security.Tokens; /**//// /// UsernameTokenManager 的摘要说明 /// public class UsernameTokenManager : UsernameTokenManager { public UsernameTokenManager() { } public UsernameTokenManager(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"; } } 十一、在客户项目中添加Microsoft.Web.Services3.dll的引用,并添加WebService引用 十二、其中查看Reference.cs中Service中是否继承 Microsoft.Web.Services3.WebServicesClientProtocol 1、选择客户项目右键选择WSE settings 2、选择Policy tab 选择 Enable Policy 并点击Add.. 3、填写Policy名称,下一步 4、选择“Secure a client applition”并选择“Username”并下一步 5、选择“sign and Encrypt”下一步 6、选择“Select Certificate...”并选择"WSE2QuickStartServer"下一步并完成就能生成web.config和wse3policyCache.config 十三、在客户端中完成以下 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(); } } } 十四、总结 主要讲述利用WSE3.0构建安全的WebService,可以看出WSE3.0主要是建立配置文件和加入元数据就能实现安全,使用WSE3.0以一种比较优美的模式来完成WebService的安全,达到业务逻辑和安全分开,可以对现有的或者新项目平滑的达到WebService的安全
    2009年6月22日 3:18