2013-03-01 46 views
1

我是WCF服務新手。我想創建一個WCF服務basichttpbinding創建一個自定義的身份驗證機制,然後提供對我的WCF服務的訪問。我已經使用 安全模式=傳輸clientcredentialtype =基本。我寫了一個自定義驗證器函數來驗證我的用戶名和密碼。WCF用戶名認證不起作用

驗證功能

namespace CustomValidator 

{ 
    public class MyCustomValidator : UserNamePasswordValidator 

    { 
     public override void Validate(string userName, string password) 
    { 
     // This isn't secure, though! 
     if ((userName != "check") || (password != "check")) 
     { 
      throw new SecurityTokenException("Validation Failed!"); 
     } 
    } 
    } 
} 

這是我的服務配置文件

< ?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <identity impersonate="false" /> 
</system.web> 
<system.serviceModel> 
    <diagnostics> 
     <endToEndTracing activityTracing="true" messageFlowTracing="true" propagateActivity="true"></endToEndTracing> 
    </diagnostics> 


    <bindings> 
    <basicHttpBinding> 
    <binding name="BasicHttpEndpointBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Basic" /> 
     <!-- <message clientCredentialType="UserName" />--> 
     </security> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="Service"> 
      <endpoint address="" binding="basicHttpBinding" name="BasicHttpEndpoint" bindingConfiguration="BasicHttpEndpointBinding" contract="IService"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 

    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceBehavior"> 
       <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
       <serviceMetadata httpGetEnabled="false" /> 
       <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
       <serviceDebug includeExceptionDetailInFaults="false" /> 
       <serviceCredentials> 

        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="CustomValidator.MyCustomValidator, App_Code" /> 

        </serviceCredentials> 
       </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <security> 
     <authentication> 
      <basicAuthentication enabled="true" /> 
      <anonymousAuthentication enabled="false" /> 
      <windowsAuthentication enabled="false" /> 

     </authentication> 

    </security> 
</system.webServer> 
    </configuration> 

所以這裏的問題是,每當我跑我的服務,我得到一個登錄對話框中我輸入用戶名和密碼(我的驗證器期望用戶名和密碼都是一樣的),我沒有得到我的服務細節頁面,這是在正常情況下(沒有認證機制)出現的。我不知道我錯過了什麼,我確實喜歡它的所有配置在我的情況很重要,但我仍然無法找出錯誤。

回答