Служба данных WCF с использованием пользовательского UserNamePasswordValidator

Я пытаюсь настроить службу данных WCF для использования моего пользовательского UserNamePasswordValidator, он отлично работает для стандартных служб WCF; у меня проблема в следующем: в моем web.config я не могу указать конечную точку службы данных WCF, потому что она не реализует контракт, который я могу использовать. Увидеть ниже

  <service behaviorConfiguration="GetHttpsIncludeFaults" name="WCFDataService">
    <endpoint
        address=""
        binding="basicHttpBinding"
        bindingConfiguration="BasicHTTP"
        Contract="WHAT-GOES-HERE?"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>

  <behavior name="GetHttpsIncludeFaults">
    <dataContractSerializer maxItemsInObjectGraph="204800" />
    <serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="pjt.UPValidate, pjt"/>
    </serviceCredentials>
    <serviceMetadata httpsGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="true" />
  </behavior>

Для моих обычных служб WCF я просто выделяю интерфейс, реализуемый классом; с Data Services у меня такого интерфейса нет.

Если есть лучший способ настроить ServiceBehavior, я открыт для этого, это единственный способ, который я знаю, как это сделать.


person Nate    schedule 19.10.2011    source источник


Ответы (1)


Немного поковырявшись, я смог получить новую ошибку, используя этот контракт: System.Data.Services.IRequestHandler.

После устранения ошибки о том, что контракт не был реализован моей службой, кажется, что службы данных WCF работают только с webHttpBinding, который не поддерживает безопасность TransportWithmessageCredential.

Итак, это не совсем отвечает на мой вопрос; однако это, по-видимому, единственный способ защитить службу данных WCF с помощью специального средства проверки имени пользователя и пароля: http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx

Это включает в себя использование BASIC-аутентификации и написание собственного HttpModule, чтобы IIS делегировал аутентификацию вашему собственному валидатору имени пользователя и пароля. Очевидно, что это следует использовать только через HTTPS.

person Nate    schedule 21.10.2011