2010-06-03 14 views
14

Mam usługi WCF dostępne przez Internet, który używa wsHttpBinding z trybu zabezpieczeń wiadomości i poświadczenia klienta nazwa użytkownika.Jak używać niestandardowego powiązania w WCF i utrzymywać tryb zabezpieczeń wiadomości z poświadczeniami klienta nazwa użytkownika?

<bindings> 
    <wsHttpBinding> 
     <binding name="wsHttpEndpointBinding" messageEncoding="Mtom" maxReceivedMessageSize="104857600"> 
      <readerQuotas maxArrayLength="104857600"/> 
      <security mode="Message"> 
      <message clientCredentialType="UserName"/> 
      </security> 
     </binding> 
    </wsHttpBinding> 
</bindings> 

Zorientowałem się, że przesyłanie moich danych z klienta na serwer zajmuje zbyt dużo czasu. Przeczytałem, że mogę korzystać z trybu customBinding i binaryEncoding dla mojej usługi.

tak:

<bindings> 
    <customBindings> 
    <binding name="NetHttpBinding"> 
     <binaryMessageEncoding /> 
     <httpTransport /> 
    </binding> 
    </customBindings> 
<bindings> 

Ale tutaj nie ma żadnej wzmianki o trybie bezpieczeństwa wiadomość i klienta typu poświadczeń ...

Jak mogę używać zwyczaj wiązania z binaryEncoding i zachować tryb zabezpieczeń wiadomość z nazwą użytkownika poświadczenia klienta?

+0

dobre rozwiązanie? – Kiquenet

Odpowiedz

1

Ustaw secureConversationBootstrap na UserNameForSslNegotiated. Wypróbuj coś podobnego do wiązania poniżej.

<bindings> 
<customBinding> 
    <binding name="wss-username-binary"> 
    <transactionFlow/> 

    <security 
authenticationMode="SecureConversation" 
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"> 

     <secureConversationBootstrap 
authenticationMode="UserNameForSslNegotiated" 
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" /> 
    </security> 

     <binaryMessageEncoding /> 
    <httpTransport/> 
    </binding> 
</customBinding> 
</bindings> 
-1

Wypróbuj to może pomóc bardziej ---- ma niestandardowe powiązanie, niestandardowe zabezpieczenia i certyfikat.

  <endpoint address="mex" 
         binding="mexHttpBinding" 
         contract="IMetadataExchange" /> 

     </service> 

    </services> 
    <bindings> 
     <wsHttpBinding> 

      <binding name="CommonBinding" maxReceivedMessageSize ="2147483647"> 
       <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
           maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
           maxNameTableCharCount="2147483647" /> 

       <security mode="Message"> 
        <message clientCredentialType="UserName" /> 
       </security> 
      </binding> 

     </wsHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="myServiceBehavior"> 

       <serviceCredentials> 

        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Custom.Security.CustomUserNameValidator, Custom.Security" /> 
        <clientCertificate> 
         <authentication certificateValidationMode= "PeerOrChainTrust" /> 
        </clientCertificate> 
        <serviceCertificate findValue="CertName" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" /> 
       </serviceCredentials> 

       <serviceMetadata httpGetEnabled="True"/> 
       <serviceAuthorization principalPermissionMode="Custom"> 
        <authorizationPolicies> 
         <add policyType="Custom.Security.AuthorizationPolicy, Custom.Security" /> 
        </authorizationPolicies> 
       </serviceAuthorization> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 
2

wiem, że to nie jest odpowiedź szukasz, ale to jest mój config. Używam niestandardowego powiązania z uwierzytelnianiem UserNameOverTransport.

To może dać ci wskazówkę, co zmienić, aby uzyskać poprawny numer &.

<customBinding> 
    <binding name="MyCustomHttpBinding" receiveTimeout="00:20:00" sendTimeout="00:20:00"> 
     <security authenticationMode="UserNameOverTransport"> 
      <localServiceSettings maxClockSkew="Infinite" /> 
     </security> 
     <mtomMessageEncoding maxBufferSize="2097152" messageVersion="Soap12" > 
      <readerQuotas maxStringContentLength="2097152"/> 
     </mtomMessageEncoding> 
     <httpsTransport maxBufferSize="2097152" maxReceivedMessageSize="1073741824" transferMode="Streamed" /> 
    </binding> 
</customBinding> 

Należy pamiętać, że używam kodowania MTOM, które w moim przypadku lepiej pasuje do mojego scenariusza.

Powiązane problemy