Служба данных WCF с использованием пользовательского UserNamePasswordValidator - PullRequest
2 голосов
/ 19 октября 2011

Я пытаюсь настроить Службу данных 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, я открыт для этого, это единственный способ, которым я знаю, как это сделать.

1 Ответ

1 голос
/ 21 октября 2011

После небольшого возни, я смог получить новую ошибку, используя этот контракт: 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.

...