使用自定义UserNamePasswordValidator的WCF数据服务

时间:2011-10-19 19:24:26

标签: .net wcf authentication authorization wcf-data-services

我正在尝试设置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服务,我只是简化了该类实现的接口;使用数据服务我没有这样的界面。

如果有更好的方法来自定义ServiceBehavior我对此持开放态度,这只是我知道如何做的唯一方式。

1 个答案:

答案 0 :(得分: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使用。