IIS6中的自定义用户名/密码身份验证

时间:2012-04-17 13:20:56

标签: wcf iis-6 transport-security

我有一个我在IIS6中托管的WCF服务。我正在尝试使用传输级别安全性设置自定义用户名/密码身份验证。我已经设置了一个测试证书,并让客户端通过SSL连接而没有指定认证,即:

      <security mode="Transport">
        <transport clientCredentialType="Basic" />
      </security>

我已经设置了一个带有Message安全性和客户端凭据类型“UserName”的自定义验证器,但我现在想要将其与传输级安全性结合使用。当我设置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中,我最初启用了“启用匿名访问”选项。我也尝试启用“基本身份验证(密码以明文形式发送)”复选框,但没有成功。

1 个答案:

答案 0 :(得分:0)

这篇文章似乎暗示Basic只适用于Windows帐户,第三方解决方案......

Basic Authentication with WCF REST service to something other than windows accounts?

我自己一直在这里,最后选择了一条很有效的单腿操作。

修改 这篇文章在我找到解决方案http://www.cleancode.co.nz/blog/523/oauth-dot-net

的途中给了我很好的帮助

值得一提的是1脚和2脚OAuth之间的差异。 1-leg是客户端和服务都知道客户端的帐户名称的密码(密码),用于加密和解密身份验证请求(所有这些都被添加到查询字符串中)。有两条腿,这是由第三方,如谷歌,脸等等。