Проверка подлинности Kerberos с помощью привязки WCF customBinding

Я использую веб-службу ASMX и создаю для нее клиент WCF с customBinding. В разделе безопасности customBinding я использую authenticationMode как «KerberosOverTransport» и использую HTTP как транспортную среду. См. Приведенный ниже код.

<customBinding>
    <binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00"
      receiveTimeout="00:10:00" sendTimeout="00:01:00">
      <security allowSerializedSigningTokenOnReply="true" authenticationMode="KerberosOverTransport"
        requireDerivedKeys="false" messageProtectionOrder="SignBeforeEncryptAndEncryptSignature"
        messageSecurityVersion="Default" requireSecurityContextCancellation="false">
        <secureConversationBootstrap />
      </security>
      <textMessageEncoding messageVersion="Soap11" />
      <httpTransport authenticationScheme="Ntlm" unsafeConnectionNtlmAuthentication="false" />
    </binding>
  </customBinding>
</bindings>
<client>
  <endpoint address="http://localhost:1612/TestService.asmx" binding="customBinding"
    bindingConfiguration="Service1Soap" contract="WCFProxy.Service1Soap"
    name="Service1Soap" />
</client>

Когда я создаю экземпляр класса Proxy и вызываю метод Hello World веб-службы, я получаю следующее исключение.

"Привязка CustomBinding. 'http://tempuri.org/" для урны Service1Soap. : Контракт Service1 настроен с режимом аутентификации, который требует целостности и конфиденциальности транспортного уровня. Однако транспорт не может обеспечить целостность и конфиденциальность ».

==========================================================================================

в System.ServiceModel.Dispatcher.SecurityValidationBehavior.SoapOverSecureTransportRequirementsRule.ValidateSecurityBinding (SecurityBindingElement SecurityBindingElement, Переплет связывания, ContractDescription контракта) на System.ServiceModel.Dispatcher.SecurityValidationBehavior.ValidateSecurityBinding (SecurityBindingElement SBE, Переплет связывания, ContractDescription контракта) в System.ServiceModel.Dispatcher.SecurityValidationBehavior .ValidateBinding (привязка привязки, контракт ContractDescription, SecurityBindingElement и securityBindingElement) в System.ServiceModel.Dispatcher.SecurityValidationBehavior.System.ServiceModel.Description.IEndpointBehavior.Validate (ServiceEndpointServiceEndviceModelValidation (ServiceEndpointServiceEndpoint) ) в System.ServiceModel.Channels.ServiceChannelFactory.BuildChannelFactory (ServiceEndpoint serviceEndpoint) в System.ServiceModel.ChannelFactory.CreateFactory () в System.ServiceModel.ChannelFactory.OnOpening () в System.ServiceModel.Channels.CommunicationObject.Open (тайм-аут TimeSpan) в System.ServiceModel.ClientBase1.System.ServiceModel.ICommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.ClientBase1.Open () в WCFClient.Program.Main (String [] args) в D: \ Rakesh \ Test Projects \ WebServiceCustomBinding \ WCFClient \ Program.cs: строка 16 в System.AppDomain._nExecuteAssembly (сборка сборки, аргументы String []) в System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) в Microsoft .VisualStudio.HostingProcess.HostProc.RunUsersAssembly () в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) в System.Threading.ExecutionContext.Run (ExecutionContext executionContext, обратного вызова ContextCallback, состояние объекта) в System.Threading.ThreadHel

Мне не повезло с поиском в Google этого исключения. Прошло уже 2 дня с НИОКР. Пожалуйста, помогите мне в этом вопросе. Буду очень рад вашей помощи!

С уважением, Ракеш.


person Rakesh Nagpal    schedule 25.08.2010    source источник


Ответы (2)


Попробуйте вместо этого использовать BasicHttpBinding со следующей безопасностью:

<bindings>
  <basicHttpBinding>
    <binding name="Secured">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

Также вы можете проверить эту статью - там есть часть о настройке клиента .

person Ladislav Mrnka    schedule 25.08.2010
comment
Я пробовал использовать basicHttpBinding до того, как начать с customBinding. Причина, по которой я использую customBinding, заключается в том, что мое приложение должно взаимодействовать с веб-службами Java, которым требуется проверка подлинности Kerberos для реализации единого входа. Более того, веб-сервис Java может быть установлен на любой платформе, кроме Windows, поэтому на этой платформе Windows clientCredentialType может не работать. Спасибо за ответ. Можете ли вы предложить мне решение для указанного требования? Извините за то, что не предоставил эти подробности раньше! - person Rakesh Nagpal; 26.08.2010
comment
Чем вам понадобится эта веб-служба Java для тестирования. Было бы здорово, если бы у вас был WSDL этой службы с политиками безопасности, описывающими ее конфигурацию. В настоящий момент вы пытаетесь смоделировать службу с помощью ASMX, который отличается от Java. - person Ladislav Mrnka; 26.08.2010
comment
Да, я понимаю. Моим фактическим требованием является создание клиента WCF на C # .NET, который будет реализовывать аутентификацию Kerberos для реализации единого входа. Это, в свою очередь, будет использоваться приложением Java Windows для аутентификации пользователя и назначения токена Kerberos. В настоящее время приложение Java еще не готово, поэтому я пытаюсь заставить этот клиент работать только с веб-службой ASMX. Позже, при успешном тестировании с сервисом ASMX, я попытаюсь интегрировать этот клиент с Java-приложением. - person Rakesh Nagpal; 27.08.2010

Попробуйте вместо этого использовать элемент привязки <httpsTransport requireClientCertificate="true"/>.

person hiddenUser    schedule 10.09.2013