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

Служба WCF WebConfig (частично).

    <services>
          <service name="Bricks99.LicensingServer.LicensingService"
                   behaviorConfiguration="Bricks99ServiceBehavior">        
            <!-- use base address specified above, provide one endpoint -->
            <endpoint address=""
                      binding="basicHttpBinding"
                      bindingConfiguration="Bricks99Binding"
                      contract="Bricks99.LicensingServer.ILicensingService" />
            <!--<endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />-->
          </service>
    </services>
    <basicHttpBinding>
            <binding name="Bricks99Binding">
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Basic" />
              </security>
            </binding>
    </basicHttpBinding>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Bricks99.LicensingServer.CCustomValidatorClass, Bricks99.LicensingServer"/>
</serviceCredentials>

Клиент - ASP.NET 2.0

LicensingService service = new LicensingService();
            //Authentication            
CredentialCache credCache = new CredentialCache();
            credCache.Add(new Uri(service.Url), "Basic", new NetworkCredential("Test", "1234567"));
service.Credentials = credCache;
service.PreAuthenticate = true;
service.UseDefaultCredentials = false;
result = service.VerifyLicenseKey(licenseKey, string.Empty);

Результат всегда Сбой запроса с состоянием HTTP 401: не авторизован.Я также отключил анонимный доступ к папке.Его все еще не работает.Любые идеи о том, как правильно установить учетные данные?

РЕДАКТИРОВАТЬ: похоже на переопределенный метод

public override void Validate(string userName, string password)
        {
            try
            {
                if(userName != "Test" || password != "1234567")
                {
                    throw new FaultException("The provided credentials are invalid.");
                }
            }
            catch(FaultException ex)
            {
                LicensingData.Operations.LogError(ex);                
            }
        }

никогда не получает удар.

1 Ответ

2 голосов
/ 26 декабря 2010

Через несколько часов исследований я обнаружил, что хостинг-провайдер не разрешил обычную аутентификацию по умолчанию. Чтобы пользовательская аутентификация работала, необходимо включить базовую аутентификацию в IIS.

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