Halten Sie MEX Bindung unsicher, während HTTP Sicherung Bindung w / UserNamePasswordValidator?

StackOverflow https://stackoverflow.com/questions/1038683

  •  10-07-2019
  •  | 
  •  

Frage

Wir verwenden UserNamePasswordValidator zusammen mit einem Zertifikat Zugang zu unseren WCF-Diensten zu sichern.

Allerdings sind die benutzerdefinierten Autorisierungsrichtlinien verwenden wir sind SERVICE Verhalten, nicht Endpunkt Verhalten, so dass sie gelten für alle Endpunkte, die MEX-Endpunkt einschließlich. Wir möchten in der Lage sein zu gehen, und die Service-Referenzen unter Verwendung von Visual Studio zu greifen, ohne das Service-Verhalten jedes Mal kommentieren zu müssen, aber da sowohl die mex und der wshttp Endpunkt gesichert sind, erhalten wir einen Fehler, wenn Service-Referenz tun „Add .. "

Gibt es eine Möglichkeit, um dieses?

War es hilfreich?

Lösung

Verwenden Sie das gleiche auf beiden verbindlich? Wenn ja, versuchen zwei separate Bindungen - ein für den mex Endpunkt und eine für die wshttp:

Also für den Service - so etwas wie:

<wsHttpBinding><binding name="wsHttpBindingMessageUname">
<security mode="Message">
    <message clientCredentialType="UserName" negotiateServiceCredential="true"
      establishSecurityContext="false" />
</security></binding></wsHttpBinding>

und für den mex Endpunkt (keine Sicherheit):

<customBinding><binding name="customMex">
<textMessageEncoding>
    <readerQuotas maxDepth="2147483647"
          maxStringContentLength="2147483647"
          maxArrayLength="2147483647"
          maxBytesPerRead="2147483647"
          maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport transferMode="Buffered"
               maxReceivedMessageSize="2147483647"
               maxBufferSize="2147483647"/></binding></customBinding>

Service-Endpunkte werden so etwas wie:

<endpoint address="" behaviorConfiguration="Server.Services.DefaultEndpointBehavior"  binding="wsHttpBinding" bindingConfiguration="wsHttpBindingMessageUname" name="DefaultHttp" contract="Server.Services.IMyService" listenUriMode="Explicit" />
<endpoint address="mex" binding="customBinding" contract="IMetadataExchange" name="" bindingConfiguration="customMex" listenUriMode="Explicit" />

Mit diesem Setup, es ist die Anwendung nicht die Sicherheit für mex, so dass Sie nicht, dass die Nachricht erhalten sollen, wenn sie versuchen Dienstverweis zu aktualisieren. Entweder das, oder ein andere Schaffung sichere Bindung, die unterschiedlichen Anmeldeinformationen verwendet, das heißt ein Client-Zertifikat auf Ihrem Rechner.

Die folgenden MSDN Post hat eine Probe dieses und mehr Informationen finden Sie auf dieser Blog in Bezug auf sichere mex rel="nofollow Endpunkte.

Andere Tipps

ich glaube, von der Frage, die er stellte fest, dass er Dienst Behaviors wurde mit, so dass die Bindungskonfiguration nicht einen Unterschied machen, da der gesamte Dienst des UserNamePassword Validator verwendet.

Zwei Dinge in den Sinn kommen hier.

entfernt die explizite mex Bindung und fügen Sie unter Service-Verhalten

<serviceMetadata httpsGetEnabled="true" />

oder Halten Sie das mex Bindung und ermöglichen

<serviceMetadata httpGetEnabled="true" />

CustomUserNameValidator doesnt ausgeführt werden, wenn Metadaten anfordern, also, wenn httpsgetenabled ist nicht auf, und Sie haben eine mex auf http-Bindung, die Sie benötigen httpGetenabled auf mindestens

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top