加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WSE3.0 用UserToken来进行身份验证

发布时间:2020-12-17 02:48:45 所属栏目:安全 来源:网络整理
导读:转载于http://www.cnblogs.com/jiekeng/archive/2006/11/08/554545.html,但是觉得很不错,就贴过来了。 ???主要是详细介绍使用WSE3.0建立使用安全的WebService 一、下载WSE3.0,并安装,特别要提的是选择安装的时候选择vs2005开发人员的模式? 下载 二、一些

转载于http://www.cnblogs.com/jiekeng/archive/2006/11/08/554545.html,但是觉得很不错,就贴过来了。

???主要是详细介绍使用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;

///?<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;

多的可以去除掉!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读