Ich muss einen Dienst für eine Drittpartei bereitstellen, die Soap-Nachrichten mit einem signierten Timestamp sendet.WCF-Dienst mit WS-Security erfordert nur Signed Timestamp
Wie kann ich meinen Dienst konfigurieren, um dies zu unterstützen?
UPDATE Ich habe es geschafft, nahe dem Format der SOAP-Nachricht zu erhalten, die wir nach, aber WCF besteht darauf, sowohl den Benutzernamen auf die Unterzeichnung und die Zeitstempel-Token, Gibt es eine Möglichkeit die Bindung an zu modifizieren nur den Zeitstempel unterschreiben?
Weitere Update- Hier sind unsere Anforderungen:
- Die Timestamp-Element zu unterzeichnen.
- Der CN-Name des Zertifikats, das für die Signierung verwendet wird, muss mit dem Benutzernamen "gib" im UsernameToken-Element übereinstimmen.
- Das zum Signieren verwendete Zertifikat MUSS im BinarySecurityToken-Element gesendet werden.
- Das KeyInfo-Element muss nur ein SecurityTokenReference-Element enthalten, das für den Verweis auf das BinarySecurityToken verwendet werden muss.
- Ein Canonicalization-Algorithmus muss angegeben werden.
- Die SignatureMETHOD muss angegeben werden und muss der SHA-1- oder SHA-2-Algorithmus sein.
- Freistehende Signaturen sollten verwendet werden.
Irgendwelche Vorschläge?
CURRENT CONFIG
Client-Bindung
<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-Verhalten
<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>
Dienstbindung
<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-Verhalten
<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>
Haben Sie die Konfiguration so konfiguriert, dass nur das Timestamp-Element signiert wurde? Ich versuche gerade, dasselbe zu erreichen. – Edward