我目前正在研究 WCF 以实现将通过 IIS 运行的 RESTful 服务。目前,我们的软件提供了针对各种来源对用户进行身份验证的能力
我们自己的内部用户帐户存储在数据库中
一个指定的 windows 活动目录,如果身份验证成功,则会进行查找以查找 windows 链接到哪个内部帐户
- 另一个 LDAP 服务器,例如 Novell
所以我希望它工作的方式是客户端通过 SSL 发送带有身份验证标头(现在基本)的 http(s) 请求,然后服务将使用自定义身份验证来实现上述过程。
目前,我正在自托管服务并尝试使自定义身份验证示例正常工作,它可以正确启动,但是当我尝试从浏览器或可以附加身份验证标头的工具发出请求时,我得到的只是
“错误 101 (net::ERR_CONNECTION_RESET):连接已重置。”
我在自定义身份验证类中设置了一个断点,但它永远无法到达,所以我猜测它的配置有问题。
我的应用程序配置;
<configuration>
...
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="secure">
<security mode="Transport">
<transport clientCredentialType="Basic"></transport>
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="CELCAT.RegisterMarker.RegisterMarker" behaviorConfiguration="myServiceBehavior">
<endpoint address="https://mymachine:8001/servicename"
binding="webHttpBinding"
bindingConfiguration="secure"
contract="myServiceContract" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="myServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="True"/>
<serviceAuthorization serviceAuthorizationManagerType="MyServiceAuthorizationManager, authenticatonassembly" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="servicenamespace, serviceassembly" />
<serviceCertificate findValue="certname"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
我读过一篇文章说我想要做的事情是不可能使用 WCF 开箱即用的,为了实现这一点,我需要编写一个自定义模块或请求拦截器,如下所述;
通过自定义模块进行身份验证; http://custombasicauth.codeplex.com/
通过请求拦截器进行身份验证; http://www.codeproject.com/KB/WCF/BasicAuthWCFRest.aspx
这对我来说似乎应该是可能的,所以我的问题是
- 我正在尝试做的事情可能吗?
- 如果是这样,我做错了什么?或者如果不是,哪种解决方法最好?