2010-12-21 72 views
1

我有一个wcf服务和客户端,并希望通过检查用户名和密码来提供额外的保护。我具有以下validatir类wcf中的自定义用户名验证

public class UserCredentialsValidator : UserNamePasswordValidator 
    { 
     public override void Validate(string userName, string password) 
     { 
      if (!string.Equals(userName, Config.Login, StringComparison.InvariantCultureIgnoreCase) 
       && !String.Equals(password, Config.Password)) 
      { 
       throw new FaultException("Invalid user credentials. Access denied."); 
      } 
     } 
    } 

和以下服务器配置

<behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehavior"> 
      <serviceDebug includeExceptionDetailInFaults="true"/> <serviceCredentials> 
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="FileStorage.Core.ServiceModel.UserCredentialsValidator, FileStorage.Core"/> 
       </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service name="FileStorage.Core.ServiceModel.FileStorageService" behaviorConfiguration="serviceBehavior"> 
     <endpoint address="" contract="FileStorage.IFileStorage" binding="wsHttpBinding" bindingConfiguration="bindingConfig"/> 
     </service> 
    </services> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="bindingConfig" maxBufferPoolSize="104857600" maxReceivedMessageSize="104857600" openTimeout="00:10:00" 
       closeTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"> 
      <readerQuotas maxDepth="32" maxStringContentLength="104857600" maxArrayLength="104857600" 
         maxBytesPerRead="104857600" maxNameTableCharCount="1024"/> <security mode="Message"> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 

问题是,CustomValidatir从未执行验证方法,例如验证逻辑不执行

什么会导致这种情况?在此先感谢

回答

0

试着改变你的“安全”部分,阅读这...

<security mode="TransportWithMessageCredential"> 
    <transport clientCredentialType="Basic" proxyCredentialType="Basic" /> 
    <message clientCredentialType="UserName"/> 
</security> 
0

安全模式=“TransportWithMessageCredential”就行了。不知道为什么我们需要传输clientCredentialType =“Basic”proxyCredentialType =“Basic”...

我正在使用传输clientCredentialType =“证书”似乎诀窍实际上在于选择正确的安全模式。