У меня есть привязка WCF, использующая элемент безопасности TransportSecurityBindingElement, но у меня есть постоянные проблемы с точностью времени на сервере как клиента, так и сервера (стороннего).Удалять секунды с момента времени отправки сообщения при отправке подписанного запроса
Как удалить секунды, чтобы сделать отметку времени только с точностью до минуты (мне говорят, что сервер примет это).
Альтернативы идеи у меня были, чтобы обновить системное время перед каждым запросом, однако это предполагает (неправильно), что время сервера является точным. Я также попытался удалить метку времени вообще (это может быть не обязательно), но я получаю System.InvalidOperationException
говоря Signing without primary signature requires timestamp.
.Net код для создания защитного элемента: заголовок
Dim msgSecVer As System.ServiceModel.MessageSecurityVersion = ServiceModel.MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
Dim tsbe As TransportSecurityBindingElement = SecurityBindingElement.CreateCertificateOverTransportBindingElement(msgSecVer)
tsbe.EnableUnsecuredResponse = True
tsbe.SetKeyDerivation(False)
tsbe.AllowInsecureTransport = True
tsbe.IncludeTimestamp = True
'adding clock skew doesn't seem to make any difference?
Dim clockSkew As TimeSpan = TimeSpan.FromMinutes(1)
tsbe.LocalClientSettings.MaxClockSkew = clockSkew
tsbe.LocalServiceSettings.MaxClockSkew = clockSkew
Return tsbe
сообщения, примечания (возможно, избыток) точность временной метки:
POST http://wwwqa.xxxx.com/services/
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: xxxx
SOAPAction: ""
Host: wwwqa.xxxx.com
Content-Length: 2400
Expect: 100-continue
Connection: Keep-Alive
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2013-12-04T10:53:13.568Z</u:Created>
<u:Expires>2013-12-04T10:58:13.568Z</u:Expires>
</u:Timestamp>
<o:BinarySecurityToken u:Id="uuid-bc441202-xxxx-xxxx-a176-02f2a61a6002-1" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">....xxxx....</o:BinarySecurityToken>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#_0">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>xxxx</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>xxxx</SignatureValue>
<KeyInfo>
<o:SecurityTokenReference><o:Reference URI="#uuid-bc441202-xxxx-xxxx-a176-02f2a61a6002-1"/></o:SecurityTokenReference>
</KeyInfo>
</Signature>
</o:Security>
</s:Header>
Вы проверили это? http://msdn.microsoft.com/en-us/library/aa738468.aspx – mostruash
У меня не было, но теперь я добавил часы Skew, но, похоже, это не имеет никакого отношения к метке времени отправленных сообщений. (Я не вижу, чтобы это имело какое-либо значение, я сделал что-то не так? (Обновленный код, о котором идет речь). –
Где это происходит, когда время неверно, и где вы выбрали 'InvalidOperationException', когда вы удаляете временную метку? – Zache