Службе WCF с WS-Security требуется только подписанная метка времени
Мне нужно предоставить услугу третьей стороне, которая будет отправлять мыльные сообщения с подписанной меткой времени.
Как я могу настроить свой сервис для поддержки этого?
ОБНОВИТЬ Мне удалось приблизиться к формату сообщения Soap, к которому мы стремимся, но WCF настаивает на подписании как имени пользователя, так и маркеров метки времени. Есть ли способ изменить привязку, чтобы подписывать только метку времени?
Дальнейшее обновление Вот наши требования:
Элемент Timestamp ДОЛЖЕН быть подписан.Имя CN в сертификате, используемом для подписи, ДОЛЖНО совпадать с именем пользователя, указанным в элементе UsernameToken.Сертификат, используемый для подписи, ДОЛЖЕН быть отправлен в элементе BinarySecurityToken.Элемент KeyInfo ДОЛЖЕН содержать только элемент SecurityTokenReference, который должен использоваться для ссылки на BinarySecurityToken.НЕОБХОДИМО указать алгоритм канонизации.Метод подписи ДОЛЖЕН быть указан и ДОЛЖЕН быть алгоритмом SHA-1 или SHA-2.Отдельные подписи ДОЛЖНЫ использоваться.Какие-либо предложения?
ТЕКУЩИЙ КОНФИГ
Привязка клиента
<bindings>
<wsHttpBinding>
<binding name="WSBC">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Certificate" proxyCredentialType="None"></transport>
<message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
Конечная точка клиента
<client>
<endpoint address="https://localhost/WcfTestService/Service2.svc"
behaviorConfiguration="CCB" binding="wsHttpBinding"
bindingConfiguration="WSBC"
contract="ServiceReference2.IService2"
name="wsHttpBinding_IService2" />
</client>
Поведение клиента
<behaviors>,
<endpointBehaviors>
<behavior name="MBB">
<clientCredentials>
<clientCertificate findValue="03 58 d3 bf 4b e7 67 2e 57 05 47 dc e6 3b 52 7f f8 66 d5 2a"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindByThumbprint" />
<serviceCertificate>
<defaultCertificate findValue="03 58 d3 bf 4b e7 67 2e 57 05 47 dc e6 3b 52 7f f8 66 d5 2a"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindByThumbprint" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
Служба привязки
<bindings>
<wsHttpBinding>
<binding name="ICB">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Certificate" proxyCredentialType="None"></transport>
<message clientCredentialType="UserName"
negotiateServiceCredential="false"
establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
Serice Endpoint
<service name="WcfTestService.Service2" behaviorConfiguration="SCB">
<endpoint address="" binding="wsHttpBinding" contract="WcfTestService.IService2"
bindingConfiguration="ICB" name="MS" />
</service>
Поведение службы
<behaviors>
<serviceBehaviors>
<behavior name="SCB">
<serviceCredentials>
<serviceCertificate findValue="4d a9 d8 f2 fb 4e 74 bd a7 36 d7 20 a8 51 e2 e6 ea 7d 30 08"
storeLocation="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindByThumbprint" />
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="WcfTestService.UsernameValidator, WcfTestService" />
<clientCertificate>
<authentication certificateValidationMode="None" revocationMode="NoCheck" />
</clientCertificate>
</serviceCredentials>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>