我正在尝试设置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
我对此持开放态度,这只是我知道如何做的唯一方式。
答案 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使用。