主要是详细介绍使用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 Stu
dio 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.con
fig和wse3policyCache.con
fig
八、
添加 Microsoft.Web.Services3.dll的引用,并在WebSerice类中
添加[Policy("ServicePolicy")]
九、在App_Code中
添加CustomUsernam
etokenManager类,实现Usernam
etokenManager接口

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";

}


}

十一、在客户项目中添加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的安全
原作者忘记了说如何把CustomUsernametokenManager添加到WebConfig中。我就把它贴上吧
<microsoft.web.services3>
<policy fileName="wse3policyCache.config" />
<security>
<securityTokenManager>
<add type="Microsoft.Web.Services3.QuickStart.CustomUsernametokenManager" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="Usernametoken" />
</securityTokenManager>
</security>
</microsoft.web.services3>
客户端用WebService引用只需要添加如下:
using Microsoft.Web.Services3;
using Microsoft.Web.Services3.Security.Tokens;
多的可以去除掉!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。