Lax SecurityHeaderLayout, похоже, не позволяет метке времени приходить последним

Я использую следующую привязку для моего сервиса:

<customBinding>
  <binding closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
    <textMessageEncoding messageVersion="Soap12">
      <readerQuotas maxDepth="2147483647" maxBytesPerRead="2147483647" maxArrayLength="2147483647"
                    maxStringContentLength="2147483647" maxNameTableCharCount="2147483647" />
    </textMessageEncoding>
    <security authenticationMode="CertificateOverTransport" allowInsecureTransport="true" />
    <httpTransport maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
  </binding>
</customBinding>

Это по умолчанию securityHeaderLayout на security узел к Strict, который требует Timestamp узел в сообщении, чтобы прийти первым. Я работаю с другой частью корпорации, которая не использует WCF, поэтому человек, с которым я работаю, пытается использовать SoapUI для тестирования сервиса. SoapUI добавляет Timestamp узел в конце сообщения. Это может быть перемещено вручную, но, по-видимому, оно будет перемещено назад после того, как вы подпишете узел - так что вы можете либо сделать узел первым, либо подписать его, но не оба.

Я пытался установить security узел для использования Lax или же LaxTimestampLast, но это, кажется, не имеет значения:

<security authenticationMode="CertificateOverTransport" allowInsecureTransport="true" securityHeaderLayout="Lax|LaxTimestampLast" />

Когда я звоню со своим (WCF) клиентом, используя LaxTimestampLastне получается (MessageSecurityException: Signing without primary signature requires timestamp.). Любое направление будет с благодарностью.

1 ответ

У меня недавно была такая же проблема, и я решил ее, установив messageSecurityVersion в моем customBinding для версии WSSecurity10, ранее она имела версию WSSecurity11. Вот мое пользовательское связывание, которое работает как с моим клиентом WCF, так и с SoapUI:

 <customBinding>
    <binding name="CustomBinding">
      <security authenticationMode="MutualCertificate"
                messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
                requireDerivedKeys="false"  securityHeaderLayout="Lax"  />            

      <textMessageEncoding messageVersion="Soap11" />
      <httpsTransport />
    </binding>
  </customBinding>
Другие вопросы по тегам