2013-03-01 1 views
1

Я новичок в службе WCF. Я хотел создать службу WCF с basichttpbinding, чтобы создать собственный механизм проверки подлинности, прежде чем предоставить доступ к моей службе WCF. Я использовал режим безопасности = Транспорт и clientcredentialtype = basic. Я написал пользовательскую функцию валидатора для проверки моего имени пользователя и пароля.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> 

Таким образом, проблема здесь в том, что всякий раз, когда я запускаю моей службы, я получаю диалоговое окно входа в систему были я ввести имя пользователя и пароль (мой валидатор ожидает, что и имя пользователя, и пароль будут одинаковыми), я не получаю страницу с моими служебными данными, которая использовалась в обычном случае (без механизма аутентификации). Я не знаю, чего мне не хватает, я чувствую, что все это в конфигурациях, что имеет значение в моем случае, но все же я не могу понять ошибку.

ответ

0

Создал и передал демонстрационный проект для аутентификации пользователя. Идентификация пользователя. Pls Проверить

https://onedrive.live.com/redir?resid=3FE322C74D6AA4D1%21169

Вы можете использовать SelfCert, учитывая внутри, чтобы создать сертификат с именем TrustedPeople, магазин Адрес LocalMachine