C # REST проблема аутентификации веб-сервиса - PullRequest
2 голосов
/ 30 сентября 2010

В моем предыдущем вопросе здесь я испытывал трудности с аутентификацией веб-сервисов.С помощью библиотеки WcfRestContrib, которую я нашел здесь , я смог решить эту проблему.Я создаю небольшое тестовое приложение, и аутентификация работает как чудо.

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

У меня есть следующая часть конфигурации в web.config моего веб-приложения.Это приложение, в котором я пытаюсь вызвать службу по ее URL;

http://website.localhost/Services/Info.svc/account

. Web.config для website.localhost содержит следующие части:

<location path="Services">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

<system.serviceModel>
  <extensions>
      <behaviorExtensions>
        <add name="webAuthentication" type="WcfRestContrib.ServiceModel.Configuration.WebAuthentication.ConfigurationBehaviorElement, WcfRestContrib, Version=1.0.6.107, Culture=neutral, PublicKeyToken=89183999a8dc93b5"/>
        <add name="errorHandler" type="WcfRestContrib.ServiceModel.Configuration.ErrorHandler.BehaviorElement, WcfRestContrib, Version=1.0.6.107, Culture=neutral, PublicKeyToken=89183999a8dc93b5"/>
        <add name="webErrorHandler" type="WcfRestContrib.ServiceModel.Configuration.WebErrorHandler.ConfigurationBehaviorElement, WcfRestContrib, Version=1.0.6.107, Culture=neutral, PublicKeyToken=89183999a8dc93b5"/>
      </behaviorExtensions>
  </extensions>
  <behaviors>
      <serviceBehaviors>
        <behavior name="Rest">
          <webAuthentication requireSecureTransport="false" authenticationHandlerType="WcfRestContrib.ServiceModel.Dispatcher.WebBasicAuthenticationHandler, WcfRestContrib" usernamePasswordValidatorType="CMS.Backend.Services.SecurityValidator, CMS.Backend" source="CMS.Backend"/>
          <errorHandler errorHandlerType="WcfRestContrib.ServiceModel.Web.WebErrorHandler, WcfRestContrib"/>
          <webErrorHandler returnRawException="true" logHandlerType="CMS.Backend.Services.LogHandler, CMS.Backend" unhandledErrorMessage="An error has occured processing your request. Please contact technical support for further assistance."/>
        </behavior>
      </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

IЯ исключаю каталог служб из проверки подлинности, предоставляя доступ всем анонимным пользователям, я думаю, что эта часть вызывает проблемы.

Моя служба (Info) содержит следующие атрибуты

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceConfiguration("Rest", true)]
public class Info : IInfo
{
   //Some foo hapens
}

Интернет.config службы содержит это;

<system.web>
   <authorization>          
     <allow users="*" />
   </authorization>
</system.web>

Всякий раз, когда я пытаюсь использовать вышеуказанный URL-адрес, чтобы позвонить в службу, меня перенаправляют на страницу входа в систему на сайте http://website.localhost/Logon.Как я могу предотвратить это?Насколько я знаю, web.config должен быть правильным.

- ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ -

Я изменил web.config, чтобы он выглядел так:

<sytem.web>
  //site config
</system.web>

<location inheritInChildApplications="false">
    <system.web>
      <authentication mode="Forms">
        <forms name="AllPages" loginUrl="~/Logon/" timeout="360" enableCrossAppRedirects="false" />
      </authentication>
    </system.web>
  </location>

Я также удалил это правило из файла web.config, который я добавил в более раннем состоянии.По-видимому, он конфликтует с добавленным тегом местоположения и самим web.config в службе

<location path="Services" >
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
  </location>

1 Ответ

2 голосов
/ 30 сентября 2010

Вы должны предотвратить наследование настроек, которые указаны в соответствующем разделе конфигурации и унаследованы приложениями, которые находятся в подкаталоге соответствующего приложения.

Попытайтесь поместить раздел "system.web" вашего сайта в раздел "location":

<location inheritInChildApplications="false">
  <system.web>
    <!-- your site system web settings -->
  </system.web>
</location>

Надеюсь, это поможет.

...