WCF REST / JSON服务UserNamePasswordValidator

时间:2015-05-11 11:47:02

标签: asp.net wcf wcf-binding wcf-security

我尝试在WCF Rest / JSON服务中使用基本身份验证。

因此,我创建了一个派生自" UserNamePasswordValidator"并将其添加到我的web.config中。 在IIS中,仅启用基本身份验证。

不幸的是,这个课程从未被调用过。当我在浏览器中调用rest方法时,会显示输入用户名和密码的对话框,但之后没有任何反应。

这是我的web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" 
         value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <identity impersonate="true" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="myTimeMvc.Webservice.MyTimeRestService"
               behaviorConfiguration="returnFaults">
        <endpoint behaviorConfiguration="restfulBehavior"
                  binding="webHttpBinding" 
                  bindingConfiguration="webBinding"
                  contract="myTimeMvc.Webservice.IMyTimeRestService" />
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="webBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="restfulBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="returnFaults">
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceCredentials>
            <!--<serviceCertificate findValue="MyWebSite"
                                    storeLocation="LocalMachine"
                                    storeName="My"
                                    x509FindType="FindBySubjectName" />-->
            <userNameAuthentication userNamePasswordValidationMode="Custom"
                                    customUserNamePasswordValidatorType="myTimeServiceDemoa.WcfExtension.CustomUserNameValidator,TestWcfServiceAuth" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true" />
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
</configuration>

这是我的CustomUserNameValidator.cs

namespace myTimeServiceDemoa.WcfExtension
{
 public class CustomUserNameValidator : System.IdentityModel.Selectors.UserNamePasswordValidator
{

    public override void Validate(string userName, string password)
    {

        if (null == userName || null == password)
        {
            throw new ArgumentNullException("You must provide both the username and password to access this service");
        }

        if (!(userName == "user1" && password == "test") && !(userName == "user2" && password == "test"))
        {

            throw new FaultException("Unknown Username or Incorrect Password");

        }
    }
}
}

更新: 经过两天的尝试,我现在放弃,因为我不知道自己做错了什么。似乎这些东西对我不起作用...... 我调查了很多,你需要的一切就是将IIS中的WebApplication身份验证更改为&#34; Basic&#34;并添加一个自定义&#34; CustomUserNameValidator&#34;在你的web.config但这不起作用! 如果我错了,请纠正我。

我的解决方案:

  1. 使用&#34;匿名身份验证&#34;在IIS中
  2. 使用&#34; ServiceAuthorizationManager&#34;并检查&#34; CheckAccessCore&#34;
  3. 中的HTTP-Headers

    干杯, 斯蒂芬

0 个答案:

没有答案