WSE3.0使用(一)

来源:互联网 发布:古风歌词知乎 编辑:程序博客网 时间:2024/04/30 01:16
网上这方面的资料比较少,自己琢磨了一阵子,再加上师兄的指导,现在总算能实现Soap消息的全部加密了,但是下一步,Soap消息的部分加密的实现,任重而道远,希望能和大家多多交流,共同提高。
5月31日小节
整个过程,我们要实现利用WSE 3.0 对服务进行加密,并保证能进行安全的传输。并且还兼有简单认证的功能。
 
1)建立数据库Tao1,并新建表Info_Table,
 
 
里面包括3列,ID,Text_Info,Data_Info
 
2)创建一个Web服务,功能,能够显示数据库的信息。
在其中需要添加代码:
 
因为在安装Sql数据库的时候,是按照windows模式安装的,因此,在服务器连接的时候是采用“sever=(local)/”的方式。
 
3)创建一个网站,里面包含一个Button和一个Gridview,点击Button可以返回数据库表。添加引用using System.Data.SqlClient; using Microsoft.Web.Services3;
并且添加Web引用,修改引用名字为:Tao1;
此时只需要添加代码:
        TaoService1.Service service = new TaoService1.Service();
        GridView1.DataSource = service.GetInfo();
        GridView1.DataBind();
调试,运行成功。
 
4)在服务端添加类:CustomUsernameTokenManager,具体代码如下:
using System;
using System.Xml;
using Microsoft.Web.Services3.Security;
using Microsoft.Web.Services3.Security.Tokens;
public class CustomUsernameTokenManager : UsernameTokenManager
{
    public CustomUsernameTokenManager()
    {
        //
        // TODO: Add constructor logic here
        //
    }
    public CustomUsernameTokenManager(XmlNodeList nodes)
        : base(nodes)
    {
    }
    protected override string AuthenticateToken(UsernameToken token)
    {
        return "1";
    }
}
 
它所实现的是,允许访问服务的用户,只有密码为“1”的时候才可以进入。
 
接下来我们加入WSE3.0
5)首先需要导入证书,我们采用了WSE2.0所颁发的一个测试证书,在“开始——运行”输入mmc,出现“根控制台”,在“文件——添加/删除管理单元”处添加证书,建立两个分别存放在“当前用户”和“本地计算机中”,则是下面这种情况,如图:
 
注:之所以要在两个地方都导入证书,原因是:
在“本地计算机”上的证书存储:是Web服务使用,这个地方存储公钥。
在“当前用户”上的证书存储:是客户端使用,这个地方存储证书和私钥。
导入的时候先导入.Client Private.pfx 下一步之后,它会让输入密码,这时候,在readme.html中我们会找到密码,输入,则完成证书导入。然后再导入Public.cer,这个是客户端使用数字签名需求时候的公钥。最后在展开本地计算机的证书处,导入Sever Public.cer,这个将是服务端解密客户端的公钥。
 
6)在服务端导入证书
右键,点击WSE3.0 Settings,两个都选择
 
 
接下来,添加策略:
 
策略的名字为“a”
接下来选择“Secure a service application”和“Username”,然后,默认,默认,
 
 
 
在选择证书处,选择导入的 WSE2QuickStarServer
 
 
 
然后默认,确定。
 
在安全标签处:
 
 
此时,服务端的代码为:
using System.Data.SqlClient;
using Microsoft.Web.Services3;
…..//…….
[WebMethod]
    public DataSet GetInfo()
    {
        //authorize();
        SqlConnection connection = new SqlConnection
            (@"server=(local)/;database=Tao1;Integrated Security=true");
        SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT * FROM Info_Table", connection);
        DataSet dataSet = new DataSet();
       dataAdapter.Fill(dataSet, "Info_Table");
        connection.Close();
        return dataSet;
    }
 
 
 
同理,在客户端,我们同样的添加证书。注意:在客户端和服务器端,我们使用的证书是一致的,本次实验中,我使用得是WSE2QuickStarServer证书。
这时,客户端的代码为:
using TaoService1;
using Microsoft.Web.Services3.Security.Tokens;
……////……
TaoService1.ServiceWse service = new TaoService1.ServiceWse();
        UsernameToken usernameToken = new UsernameToken("admin1", "1", PasswordOption.SendPlainText);
        service.SetClientCredential<UsernameToken>(usernameToken);
        service.SetPolicy("a");
        GridView1.DataSource = service.GetInfo();
        GridView1.DataBind();
 
整个实验中,我们手动添加的有:
服务端的Web.config的<security>节点中,我们添加了
<securityTokenManager>
<add
type="StockTraderSecure.CustomUsernameTokenManager"namespace="http://docs.oasis-open.org/wss/2004/01/oasis- 200401-wss-wssecurity-secext-1.0.xsd"localName="UsernameToken" xmlns=""/>
</securityTokenManager>
 
服务端的 wse3policyCache.config中,添加了
在<policy> 节点中添加了:
<authorization>
<allow user="admin" />
<deny user="*" />
</authorization>
 
在<extension>节点中,添加了
<extension name="authorization"
type="Microsoft.Web.Services3.Design.AuthorizationAssertion,
Microsoft.Web.Services3,
Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
 
 
全部添加好后,调试,运行,成功!
 
参考资料:《Aprèss expert service oriented architecture in c charp 2005,2nd》
原创粉丝点击