微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

多的可以去除掉!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐