Можете ли вы изменить BehaviorExtension с помощью конфигурации WCF? - PullRequest
0 голосов
/ 06 октября 2018

Мой сайт вызывает сервис (назовем его FooService), который требует очень сложного набора протоколов аутентификации.Все протоколы обернуты в пользовательское поведение ClientCredentials, которое объявлено следующим образом в коде:

class FooServiceCredentialsBehavior : ClientCredentials 
{
    public FooServiceCredentialsBehavior()
    {
        //Set up service certificate
        var cert = CertStore.FindBySerialNumber(certSerialNumber);
        base.ServiceCertificate.DefaultCertificate = cert;
    }
}

Затем мы регистрируем расширение поведения:

  <behaviorExtensions>
    <add name="FooServiceCredentials" type="MyProject.Namespace.FooService, MyProject" />
  </behaviorExtensions>

Сконфигурируем поведение endpointBehavior для его использования:

<endpointBehaviors>
    <behavior name="FooServiceCredentialsBehavior">
      <FooServiceCredentials />
    </behavior>

И настройте конечную точку для работы с ней:

<endpoint address="https://fooservice.com/bar"
          behaviorConfiguration="FooServiceCredentialsBehavior"
          contract="FooService_PortType" />

Все вышеперечисленное прекрасно работает и работает для многих клиентов в течение многих лет..

Сейчас я внедряю этот материал в систему, которая не может получить доступ к серверам CRL, и в пользовательское поведение входит сертификат службы с включенной проверкой.Поэтому мне нужно отключить проверку.Однако Я не могу изменить класс FooServiceCredentials .Если бы я мог, я бы просто сделал это:

base.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;

Но я не могу.

Я хотел бы знать, возможно ли добавить конфигурацию WCF, которая применяется к пользовательскойПоведение учетных данных, которые будут делать то же самое.Примерно так:

<endpointBehaviors>
    <behavior name="FooServiceCredentialsBehavior">
      <FooService>
          <ServiceCertificate>
              <authentication certificateValidationMode="None"/>
          </ServiceCertificate>
      </FooService>
    </behavior>

Этот точный XML не работает (служба даже не запускается), но я надеюсь, что есть какой-то волшебный способ упорядочить эти тегиотключить проверку сертификата сервиса только из конфигурации.

Возможно ли это?Как?

1 Ответ

0 голосов
/ 17 октября 2018

Официальная документация говорит, что это возможно сделать.Проверьте следующую ссылку: проверка подлинности элемента serviceCertificate .

Я думаю, что с настройкой поведенияExtension у вас должна работать следующая конфигурация, поскольку вы наследуете от ClientCredentials:

<behavior name="FooServiceCredentialsBehavior">
  <FooServiceCredentials>
      <serviceCertificate>
        <authentication certificateValidationMode="None" revocationMode="NoCheck" />
      </serviceCertificate>
  </FooServiceCredentials>
</behavior>

Если это не работает, есть еще один возможный вариант, не использующий поведениеExtension и без указания класса непосредственно в конфигурации clientCredentials, например:

<behavior name="FooServiceCredentialsBehavior">
  <clientCredentials type="FooNamespace.FooServiceCredentialsBehavior, FooAssemblyName">
      <serviceCertificate>
        <authentication certificateValidationMode="None" revocationMode="NoCheck" />
      </serviceCertificate>
  </clientCredentials>
</behavior>
...