2012-04-10 4 views
4

Ich versuche, ein Client-Zertifikat auf einen WCF-REST-Service anzuwenden. Ich habe einige Details zum Anwenden eines Client-Zertifikats gefunden, das Folgendes aufweist:WebHttpBinding Sicherheit enthält keinen Nachrichtenknoten?

In diesem Fall scheint es keine Probleme zu geben. Ich benutze jedoch WebHttpBinding und ich bekomme einen Fehler, der besagt, dass message ein ungültiges Kind des security Knotens ist.

Muss ich Clientzertifikate nicht ordnungsgemäß einrichten? Würde mir jemand in die richtige Richtung zeigen können?

Antwort

6

Der Nachrichtenknoten in der wsHttpBinding Konfiguration SOAP-Nachricht Sicherheits Header über die Konfiguration, deshalb ist es nicht gültig für webHttpBinding ist, die auf SOAP basiert nicht für REST-Service

Die entsprechende Sicherheit (es REST ist) ist wahrscheinlich Transport Ebene - das ist HTTPS.

Wenn Sie Sicherheit auf Nachrichtenebene verwenden möchten, müssen Sie zu SOAP wechseln, aber Nachrichtenebene ist ziemlich spezialisiert und in den meisten Fällen nicht erforderlich.

Wenn Sie ein Zertifikat für webHttpBinding (dh die Verwendung von gegenseitigem SSL) benötigen, müssen Sie den securityMode auf Transport und die Eigenschaft clientCredentialType auf Certificate setzen. In Config sieht es aus wie diese auf der Serverseite

<webHttpBinding> 
    <binding name="ClientCertServerSide"> 
     <security mode="Transport" > 
     <transport clientCredentialType="Certificate"/> 
     </security> 
    </binding> 
    </webHttpBinding> 

Auf der Client-Seite können Sie das Zertifikat in Code angeben (mit der HttpWebRequest.ClientCertificates Eigenschaft) oder in Config. In der Konfiguration sieht es aus wie

<endpointBehaviors> 
     <behavior name="ClientCertClientSide"> 
      <clientCredentials> 
       <clientCertificate findValue="put the cert name here" storeLocation="put the store here" /> 
      </clientCredentials> 
     </behavior> 
    </endpointBehaviors>