none
ADO.NET Data Services совместно с Forms Authentication RRS feed

  • Вопрос

  • Создал ADO.NET Data Servies: testservice.svc
    При попытке добавить в web.config строчку вида
     <authentication mode="Forms"/>
    Все попытки вызова сервиса приводят к редиректу на login.aspx  (даже если я залогинен).
    Пробовал разрешить анонимным пользователям доступ к этому файлу  так:
    <location path="TestService.svc">
       <system.web>
           <authorization>
              <allow users="*" />
            </authorization>
        </system.web>
    </location>
    
    Никакого эффекта.
    Идентичное описание проблемы нашел тут: http://www.writebetterbits.com/2008/02/how-to-get-adonet-data-services-astoria.html

    Предложенное там решение:
     <system.serviceModel>
    	<services> 
    		<service name="TestService">
                     <endpoint address="" binding="webHttpBinding"  contract="System.Data.Services.IRequestHandler" />
    	     </service> 
    	</services>
    
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    </system.serviceModel>
    Приводит к ошибке:
    "Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service

    Действительно похоже что на хостинге не включен доступ для анонимных пользоватлей. Когда я захожу на обычные страницы меня (один раз в начале сессии) спрашиват login/password (всплывающие окошко виндового пароля, не login.aspx). После чего спокойно пускает на все .aspx, .asmx, .ashd и проч.
    Мне нужно добиться такого же поведения и для .svc
    К сожалению хостинг клиетнский и дан "как есть". Нормального доступа к IIS - нет (только FTP) и включить доступ для анонимных пользователей - затруднительно.
    Локально все работает прекрасно (даже без указания endpoint для сервиса).
    Вопрос в том, можно ли как-то добится одинаковой логики авторизации для .svc и остальных страниц (.aspx,.asmx и т.п) только средствами web.config, не затрагивая IIS? Или, в крайнем случае, что нужно попросить от хостера что-бы оно гарантированно :) заработало?
    19 сентября 2009 г. 12:58

Ответы

Все ответы

  • А могли бы узнать включен ли доступ для анонимных пользователей на хостинге?
    19 сентября 2009 г. 15:38
  • Действительно похоже что на хостинге не включен доступ для анонимных пользоватлей. Когда я захожу на обычные страницы меня (один раз в начале сессии) спрашиват login/password (всплывающие окошко виндового пароля, не login.aspx). После чего спокойно пускает на все .aspx, .asmx, .ashd и проч.
    Мне нужно добиться такого же поведения и для .svc
    Такое (выплывающее окошко пароля) - это не Forms Authentication в asp.net, это встроенная windows/basic/digest authentication IIS, которая отрабатывает до того, как запрос дойдет до asp.net, по крайней мере в 6-ом IIS. Т.е. svc вели себя именно так, как ты хотел, до выставления authentication mode="Forms". Верни назад на "windows" :)

    Если для svc не будет спрашивать имя и пароль (что вряд ли, анонимный доступ ведь отключен), попробуй задать clienCredentialType в webHttpBinding. Что-то вроде:
        <bindings>
          <webHttpBinding>
            <binding
              name="TestServiceBining">
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType = "Basic/Digest/Ntlm/Windows" />
              </security>
            </binding>
          </webHttpBinding>
        </bindings>
    ...
     <endpoint address="" ... bindingConfiguration="TestServiceBining" ... />
    19 сентября 2009 г. 19:56
  • Судя по ошибке "Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service" - выключен.
    Судить я могу только по ней, так как имею только FTP доступ. Если бы был доступ к IIS, то я бы просто попробывал его включить (в тестовых целях). Хотя и это не идеальное решение. Клиент хочет что-бы до старта проекта "было закрыто" (причем именно таким способом. я делаю интеграцию с его уже существующим сайтом и менять что-то в чужой системе к которой нет ни исходников, ни документации :(  )
    21 сентября 2009 г. 8:35
  • Верни назад на "windows " :)
    Не могу :(, кроме моего сервиса есть еще CMS система сайта которая требует именно Forms аудентификации (местами).
    Если для svc не будет спрашивать имя и пароль (что вряд ли, анонимный доступ ведь отключен),
    Да. Если forms убрать, то спрашивает только виндовый пароль (без ридеректа на Login.aspx). Это именно то поведение которое мне нужно получить. Только при этом должен присутсвововать mode="Forms" :("
    попробуй задать clienCredentialType в webHttpBinding. Что-то вроде:
    Попробовал. Windows/Ntlm - опять начинается редирект на login.aspx, Digest/Basic приводят к ошибке:
    Security settings for this service require 'Digest/Basic' Authentication but it is not enabled for the IIS application that hosts this service.
    21 сентября 2009 г. 8:47
  • Ок, если дейстивтельно надо сначала Windows, а потом уже Forms, то варианты:
    1. Бороть редирект с помощью Location. Должно работать, по крайней мере работает на свежесозданном сайте. Взять fiddler, и проверить точный url, вдруг там не с TestService.svc редиректит. Попробовать побороть редирект не для astoria, а для обычного HelloWorld сервиса.
    2. Вынести CMS или сервис в отдельное приложение в IIS. Самое простой вариант, IMHO.
    3. Посмотреть http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx , там расписаны причины проблемы и возможное решение.
    21 сентября 2009 г. 10:24
  • 1. Пробовал изначально (что и описал в вопросе). Не помогает. Даже когда заливаю (с тестовыми целями) web.config от только что созданного чистого веб-проекта.
    2. У меня доступ только FTP. Дан только FTP, там уже крутиться написанное кем-то веб-приложение. Моя задача прикрутить к нему сервисы для интеграции. Любое решение требующие доступа к IIS (посмотреть, разрешить, разделить приложения) - крайне проблематичны в силу организационных причин. Поэтому вопрос и был "а можно-ли только с помощью web.config". По всей видимости "нельзя". Придется идти на крайние меры :) и пробивать-таки доступ к IIS :)  В любом случаю спасибо за помощь.
    3. К сожалению предложенное по ссылке решение решение тоже подразумевает возможность доступа к IIS. К тому же проблема с которой борются в статье для .aspx страниц у меня не стоит. Они и так отдаются именно по той логике которая описана в статье. Проблема в .svc. Но за саму статью спасибо. Интересная и возможно еще пригодиться.
    21 сентября 2009 г. 15:29
  • Текущая проблемма: как отключить IntegratedWindowsAuthentication на примере IIS7, желательно английской.
    Предыстория:
    Удалось получить канал связи с хостером. После того как он включил в IIS по моем просьбе анонимный доступ, ошибка сменилась на:
    "IS specified authentication schemes 'IntegratedWindowsAuthentication, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used."

    Следующая просьба:
    >Could you disable IntegratedWindowsAuthentication and RESTART IIS?
    Ответ хостера:
    I turned it off in IIS. I notice last time I stated it was set to use both Anonymous and Forms. This time it was set to use both Anonymous and Windows. 
    If you want that removed from your web.config file then I would suggest you try commenting that out. 
    I would think that when I disabled Windows authentication just now, on your site in IIS, that it would remove it from your web.config file, but it did not do that. 
    So you can you try commenting out that section in your web.config which seems to specifically tell your site to use Windows authentication and perhaps that will stop the site from getting back into this state.

    После этих его действий в web.config  <authentication mode="Forms"> сменилась на
    <authentication mode="Windows">. Ошибка осталась такой же. Вся дальнейшая переписка свелась к "выключайте идентификацию сами в web.config". Возврат к <authentication mode="Forms"> так же осталяет ту же самую ошибку.
    Все статьи которые удалось найти по поводу этой ошибке приводят шаги как отключить "
    IntegratedWindowsAuthentication" на примере IIS6. Например тут: http://dotnetbyexample.blogspot.com/2008_02_01_archive.html раздел "Deploying WCF services in IIS ". У себя локально в русской IIS7 найти каких-то следов " IntegratedWindowsAuthentication" для воспроизведения проблемы локально не получается.
    Не могли бы вы подсказать список шагов для отключения
    IntegratedWindowsAuthentication на примере IIS7, желательно английской?
    1 октября 2009 г. 9:17
    • Предложено в качестве ответа I.Vorontsov 14 октября 2009 г. 5:01
    • Помечено в качестве ответа I.Vorontsov 27 октября 2009 г. 6:26
    2 октября 2009 г. 12:41