我有一个 WCF 服务,我在 IIS6 中承载。我正在尝试使用传输级别安全性设置自定义用户名/密码身份验证。我已经设置了一个测试证书,并让一个客户端在没有指定身份验证的情况下通过 SSL 进行连接,即:
<security mode="Transport">
<transport clientCredentialType="Basic" />
</security>
我已经设置了一个具有消息安全性和客户端凭据类型"用户名"的自定义验证程序,但现在我想将其与传输级别安全性合并。当我设置了 web.config 时,当我尝试查看 WSDL 时,出现错误:"此服务的安全设置需要'基本'身份验证,但未为承载此服务的 IIS 应用程序启用它。"
以下是我的 web.config 的重要部分:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="UserNameBinding">
<security mode="Transport">
<transport clientCredentialType="Basic" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceAuthenticationBehavior"
name="Service.WebServices.MyService">
<endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration=""
name="mexBinding" contract="IMetadataExchange" />
<endpoint binding="wsHttpBinding" bindingConfiguration="UserNameBinding"
name="wsHttpBindingWithAuth" contract="Service.WebServices.IMyService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceAuthenticationBehavior">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<serviceCertificate findValue="TestCert01" storeLocation="LocalMachine"
storeName="TrustedPeople" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="Service.WebServices.ClientCredentialsValidator, Service.WebServices" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
我应该在 IIS6 中设置一些东西来启用此功能吗?在 IIS 中,我最初从启用"启用匿名访问"选项开始。我还尝试启用"基本身份验证(密码以明文形式发送)"复选框,但没有成功。
这篇文章似乎表明基本仅适用于Windows帐户,具有第三方解决方案...
使用 WCF REST 服务对 Windows 帐户以外的其他内容进行基本身份验证?
我自己也来过这里,最后选择了 1 条腿的开放式,效果很好。
编辑这篇文章让我很好地找到了解决方案 http://www.cleancode.co.nz/blog/523/oauth-dot-net
值得一提的是 1 和 2 腿 OAuth 之间的差异。 1 leg 是客户端和服务都知道客户端帐户名的客户端密钥(密码)的地方,该帐户名用于加密和解密身份验证请求(全部添加到查询字符串中)。 对于 2 条腿,这是由第三方(例如谷歌)生成的, 脸书等