wse说谈(3)——策略,用户令牌

启用策略之用户令牌(UsernameToken

实现一下用户令牌策略(UsernameToken

这里详细的说一下:

服务端配置

(一)建立web网站(略)

(二)配置WSE

1)在常规(general)选项卡上勾选其中的两项

2)策略设置

在策略(Policy)选项卡中设置,这个设置很容易,勾选Enable Policy,添加策略文件:名字为ServicePolicy

步骤(上传图片比较麻烦,所以直接文字表达):

服务器策略——客户端验证方法选择Username——用户和角色这里不勾选——消息保护级别默认就行——服务器证书这里不勾选在代码中指定证书,然后选择证书——完成。

3)用户令牌设置

这里设置比较简单,添加从UsernameTokenManager派生的类CustomUsernameTokenManager

这里给个全的:

protected override string AuthenticateToken(UsernameToken token)

{

    return "111";

}

它就返回密码是:111。如果客户端的的用户令牌密码与这个不符合,那么服务就会拒绝客户访问。这个验证令牌的方法就是这个意思。它就是验证用户令牌中的密码,而用于比较的密码就是这个方法返回的字符串。

 

客户端配置

1)策略设置方法与服务端设置相似,但该选择客户端的地方要选择客户端选项(这个应该容易理解吧)。

2)请求服务时,要设置用户令牌

3)请求服务时,不要忘记激活用户策略

下边给出一段完整的代码:

public void Test()

{

FirstInstance.WebServiceWse client =

 new FirstInstance.WebServiceWse();

 

    UsernameToken token = null;

    token = new UsernameToken("qq","111");

    client.SetClientCredential(token);

    client.SetPolicy("ClientPolicy");

 

    Console.WriteLine(client.HelloWorld("x"));

}

说明一下:

在这段代码中,设置的用户令牌密码为31

 

注意:配置时要注意异常错误,这些异常错误这里不提了。只要是一步步的进行,注意其中的安全选项冲突,则没有问题。

 

现在对消息的保护设置为None,然后,看看令牌在soap消息中的情况,这里只给出其中的一段:

<wsse:UsernameToken>

  <wsse:Username>qq</wsse:Username>

  <wsse:Password Type="…PasswordDigest">

    0nAwMqEiHeF+uCbMTRL0qfQG2Mo=

  </wsse:Password>

  <wsse:Nonce>fBduFda3nmZboNcsQDBWig==</wsse:Nonce>

  <wsu:Created>2010-04-23T09:19:38Z</wsu:Created>

</wsse:UsernameToken>

 

这里可以看到在无消息保护级别时(消息保护选择None):用户令牌其中的两个元素:用户名和用户密码,用户名是qq,而密码以数字签名格式存在。有关签名(数字签名)及散列相关内容可见我的随笔:

http://www.cnblogs.com/jams742003/archive/2010/04/09/1708012.html

http://www.cnblogs.com/jams742003/archive/2010/04/09/1708315.html

 

 

原文地址:https://www.cnblogs.com/jams742003/p/1718813.html