Пользовательская аутентификация WCF не работает - PullRequest
2 голосов
/ 17 декабря 2010

Попытка реализовать простую аутентификацию 'username' / 'password' для службы wcf.Но это просто не работает.Нет ошибок / исключений.Вот код веб-конфигурации:

    <?xml version="1.0"?>
    <configuration>     
        <system.web>
            <compilation debug="true" targetFramework="4.0"/>
            <customErrors mode="Off"/>
        </system.web>
        <system.serviceModel>
      <services>
      <service name="XYZService"
               behaviorConfiguration="XYZBehavior">        
        <!-- use base address specified above, provide one endpoint -->
        <endpoint address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="XYZBinding"
                  contract="IXYZService" />
        <!--<endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />-->
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="XYZBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
        <behaviors>
                <serviceBehaviors>
                    <behavior>
                        <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                        <serviceMetadata httpGetEnabled="true"/>
                        <!-- 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="true"/>
                        <serviceCredentials>
                            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="XYZBinding.LicensingServer.CCustomValidatorClass, XYZBinding.LicensingServer"/>
                        </serviceCredentials>
                    </behavior>
                </serviceBehaviors>
            </behaviors>
            <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
        </system.serviceModel>
        <system.webServer>
            <modules runAllManagedModulesForAllRequests="true"/>
        </system.webServer>
    </configuration>

Код проверки:

public class CCustomValidatorClass : UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
            if(userName != "Test" || password != "1234567")
            {
                throw new FaultException("The provided credentials are invalid.");
            }
        }
    }

Нет ошибок или исключений.Я могу позвонить в службу и выполнить без каких-либо учетных данных.При локальной отладке метод validate никогда не срабатывает.

Я понятия не имею, что пропускается.

1 Ответ

0 голосов
/ 18 декабря 2010

Служба размещена в IIS? Если это так, это может не поддерживаться, поскольку IIS выполняет авторизацию при переносе. http://msdn.microsoft.com/en-us/library/aa702565.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...