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>