Как использовать пользовательскую привязку в WCF и поддерживать режим безопасности сообщений с учетными данными клиента имени пользователя?
У меня есть служба WCF, доступная через Интернет, которая использует wsHttpBinding с режимами безопасности сообщений и учетными данными пользователя.
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding" messageEncoding="Mtom" maxReceivedMessageSize="104857600">
<readerQuotas maxArrayLength="104857600"/>
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
Я понял, что для переноса моих данных с клиента на сервер требуется слишком много времени.
Я прочитал, что я могу использовать режим customBinding и binaryEncoding для моего сервиса.
Вроде:
<bindings>
<customBindings>
<binding name="NetHttpBinding">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBindings>
<bindings>
Но здесь нет никаких упоминаний о режиме безопасности сообщений и типе учетных данных клиента...
Как я могу использовать пользовательскую привязку с binaryEncoding и поддерживать режим безопасности сообщений с учетными данными клиента имени пользователя?
Ответы
Ответ 1
Я знаю, что это не тот ответ, который вы ищете, но это мой конфиг.
Я использую пользовательскую привязку с аутентификацией UserNameOverTransport
.
Это может дать вам понять, что нужно изменить, чтобы начать работу.
<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>
Имейте в виду, что я использую кодировку MTOM, которая в моем случае лучше подходит для моего сценария.
Ответ 2
Установите secureConversationBootstrap в UserNameForSslNegotiated. Попробуйте что-то похожее на привязку ниже.
<bindings>
<customBinding>
<binding name="wss-username-binary">
<transactionFlow/>
<security
authenticationMode="SecureConversation"
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<secureConversationBootstrap
authenticationMode="UserNameForSslNegotiated"
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" />
</security>
<binaryMessageEncoding />
<httpTransport/>
</binding>
</customBinding>
</bindings>
Ответ 3
Попробуйте это, это может помочь вам больше. У него есть настраиваемая привязка, пользовательская безопасность и сертификат.
<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>