为什么WCF wsHttpBinding时间戳是可选的?

时间:2013-11-04 15:13:07

标签: c# wcf ws-security

我们有一个使用wsHttpBinding的WCF服务。我生成的样本请求包括一个时间戳,该时间戳由WCF针对每个请求进行验证:

  <u:Timestamp u:Id="_0">
    <u:Created>2013-11-02T16:58:24.575Z</u:Created>
    <u:Expires>2013-11-02T17:03:24.575Z</u:Expires>
  </u:Timestamp>

我们最近对服务进行了笔测试,测试人员注意到可以简单地省略timestamp元素,并且在没有它的情况下接受请求。

我正在审核该报告,我想为此添加一个解释。不幸的是,我有一个很好的搜索,我找不到任何解释它的资源,甚至没有提到它。

所以我的问题是:

  1. 为什么这是可选的?
  2. 如果我被问到,是否可以强制设置时间戳?
  3. 这是服务绑定配置:

     <wsHttpBinding>
        <binding name="usernameHttps" maxReceivedMessageSize="2147483647">
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName" establishSecurityContext="false" />
          </security>
        </binding>
      </wsHttpBinding>
    

    这是客户端绑定配置:

    <wsHttpBinding>
        <binding name="WSHttpBinding_IService" maxReceivedMessageSize="2147483647">
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="None" />
            <message clientCredentialType="UserName" establishSecurityContext="false" />
          </security>
        </binding>
      </wsHttpBinding>
    

1 个答案:

答案 0 :(得分:0)

我得到an answer to this from the MS forums

  
      
  1. 为什么这是可选的?
  2.         

    时间戳是选项,因为它是必须采取行动的reciver   它来自MSDN http://msdn.microsoft.com/en-us/library/ms977327.aspx

         

    &#34;通过了解创建和到期时间,接收者可以决定   如果数据足够新用于自己使用或数据已经变为如此   陈旧的消息应该被丢弃。 &#34;

         
        
    1. 如果我问过,是否可以强制设置时间戳?
    2.         

      是,如上所述,您的服务逻辑需要这样做   最简单的方法是在WCF处理管道中添加拦截器   将检查此标头,如果没有找到它会抛出错误   http://msdn.microsoft.com/en-us/magazine/cc163302.aspx