WCF-Dienst mit WS-Sicherheit erfordert nur signierten Zeitstempel
Ich muss einem Drittanbieter einen Dienst bereitstellen, der Seifenmitteilungen mit einem signierten Zeitstempel sendet.
Wie kann ich meinen Dienst so konfigurieren, dass er dies unterstützt?
AKTUALISIERE Ich habe es geschafft, mich dem Format der angestrebten Soap-Nachricht zu nähern, aber WCF besteht darauf, sowohl den Benutzernamen als auch den Zeitstempel-Token zu signieren. Gibt es eine Möglichkeit, die Bindung so zu ändern, dass nur der Zeitstempel signiert wird?
Weiteres Update Hier sind unsere Anforderungen:
Das Timestamp-Element MUSS signiert sein.Der CN-Name auf dem zum Signieren verwendeten Zertifikat MUSS mit dem im UsernameToken-Element angegebenen Benutzernamen übereinstimmen.Das zum Signieren verwendete Zertifikat MUSS im BinarySecurityToken-Element gesendet werden. Das KeyInfo-Element DARF nur ein SecurityTokenReference-Element enthalten, das zum Verweisen auf das BinarySecurityToken verwendet werden muss.Ein Kanonisierungsalgorithmus MUSS angegeben werden. Die Signaturmethode MUSS angegeben werden und MUSS der SHA-1- oder SHA-2-Alghorithmus sein.Detached Signaturen sollten verwendet werden.Irgendwelche Vorschläge
CURRENT CONFIG
Client Binding
<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
<client>
<endpoint address="https://localhost/WcfTestService/Service2.svc"
behaviorConfiguration="CCB" binding="wsHttpBinding"
bindingConfiguration="WSBC"
contract="ServiceReference2.IService2"
name="wsHttpBinding_IService2" />
</client>
Client Behavior
<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>
Service Binding
<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>
Service Behavior
<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>