Когда я добавляю FormsAuthentication на сайт ASP.NET MVC2 в IIS7.5, я получаю ошибку HTTP 403.14 - PullRequest
0 голосов
/ 30 сентября 2010

Я написал модуль аутентификации пользовательских форм, и когда я добавляю его в web.config моего приложения MVC2 и запускаю под IIS7.5, я получаю ошибку HTTP 403.14.Если я пытаюсь перейти к любому из перенаправленных URL-адресов, я просто получаю ошибку 404.Раздражает то, что я провел все тесты с использованием Cassini без проблем.Я применил все исправления от всех подобных проблем безрезультатно.Проблема, кажется, в том, что с моим зарегистрированным модулем Mvc Routing перестает работать.Очевидно, что это может показаться моим модулем, но почему он работал все это время, используя встроенный веб-сервер?Вот части System.x моего web.config:

  <system.web>
    <compilation debug="true" defaultLanguage="c#" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" />
            </assemblies>
    </compilation>
    <authentication mode="Forms">
      <forms defaultUrl="/" loginUrl="/Authentication/Login" enableCrossAppRedirects="true" name=".GKAUTH" path="/" requireSSL="false" timeout="1440" />
    </authentication>
        <membership defaultProvider="GatekeeperMembershipProvider" userIsOnlineTimeWindow="120">
      <providers>
        <clear />
        <add name="GatekeeperMembershipProvider" type="Ewdev.Security.MembershipProviders.GatekeeperMembershipProvider, Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" connectionStringName="Ewdev Database" minRequiredPasswordLength="7" minRequiredAlphabeticCharacters="3" minRequiredAlphabeticCaseChanges="1" minRequiredNumericCharacters="1" minRequiredNonAlphanumericCharacters="0" passwordWordsPolicy="true" passwordHistoryPolicy="13" enablePasswordRetrieval="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" minRequiredUserNameLength="6" minRequiredUserNameAlphabeticCharacters="1" minRequiredUserNameNumericCharacters="0" userNameEnableNonAlphanumeric="true" userNameWordsPolicy="true" />
      </providers>
    </membership>
    <customErrors mode="On" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Linq" />
        <add namespace="System.Collections.Generic" />
      </namespaces>
    </pages>
        <trace enabled="false" mostRecent="true" />
  </system.web>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="true" />
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="FormsAuthentication" />
            <add name="FormsAuthentication" type="Ewdev.Security.GatekeeperFormsAuthenticationModule" preCondition="" />
        </modules>
        <handlers>
            <remove name="MvcHttpHandler" />
            <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler" />
            <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        </handlers>
    </system.webServer>

Это все работает на моем рабочем столе Windows 7 x64 с VS2010, .NET 4 и Mvc2.У меня ASP.NET4 установлен / зарегистрирован в IIS.Я подозреваю, что вы, вероятно, захотите узнать, что находится в модуле, но источник довольно длинный, поэтому я не знаю, какой бит будет иметь значение.Он построен на той же спецификации API, что и встроенная, но кроме перенаправления на страницу входа в систему, когда нет необходимости вносить другие изменения в URL-адрес запроса, и появляется ошибка при попытке отобразить домашнюю страницу, которая открыта для всех.Я читал, что это может быть что-то делать с не-ASPX ресурсов, таких как сценарии, CSS, файлы изображений, поскольку модули настроены для применения ко всем типам ресурсов?Другие идеи были похожи на то, что мой модуль вызывался после модуля маршрутизации Url, но я не уверен в этом, и в-третьих, что Global.asax может не вызываться?Я уже третий день рву волосы на этом, в основном потому, что я оценил 1 час, чтобы установить сайт на IIS ... Дох!

Буду признателен за любую помощь, которую я смогу получить, и очень рад переписать мой модульесли бы я только мог понять, какой бит IIS не нравится.Кассини это нравится: - (

Ответы [ 3 ]

3 голосов
/ 01 октября 2010

Наконец-то у меня есть решение! Но это было неясно до крайности и заняло у меня большую часть недели, чтобы угадать.

Я был убежден, что проблема связана с маршрутизацией, и многие люди говорили, что вам нужно добавить специальную роль HTTP Redirection . Я уже добавил это, а также HTTP Error и Static Content Compression . В итоге было решено переустановить эти 3 роли! Было бы предположить, что порядок установки вещей в мире IIS очень важен, потому что я уже настроил IIS7.5 до установки MVC2 (через установку VS2010), и хотя я много раз делал другое исправление (aspnet_regiis -i для ASP.NET 4.0 x86 и x64) это не решило проблему маршрутизации. Если бы я сначала установил VS2010 (с включенным MVC2), а затем установил IIS7.5, я подозреваю, что у меня не было бы проблемы. Кроме того, хотите верьте, хотите нет, полная переустановка IIS7.5 НЕ устранила проблему, как я уже пробовал несколько дней назад. Итак, резюмируем и включаем любую другую необходимую конфигурацию. Вот важные исправления:

  1. Убедитесь, что вы запустили aspnet_regiis -i для обоих Framework / v4 ... и Framework64 / v4 ...

  2. Убедитесь, что вы разрешили ASP.NET v4 для 32-разрядных и 64-разрядных в IIS (через Диспетчер IIS, нажмите на Запись сервера в дереве и перейти к Ограничения ISAPI и CGI)

  3. Убедитесь, что у вас Ошибка HTTP и HTTP Перенаправление общий HTTP IIS специальный роли и Сжатие статического содержимого производительность IIS особая роль установлены. И если у вас есть , то удалить и переустановить , это что в итоге решило проблему для я.

Обратите внимание: это также относится и к IIS7 , поскольку мне пришлось сделать точно такую ​​же процедуру на производственном Windows 2008 server . Я надеюсь, что это помогает другим быстро найти решение. Вероятно, сейчас я потеряю свой контракт, так как сильно отстал из-за этой проблемы.

В моем исходном файле web.config оказалось несколько ненужных записей, потому что я пробовал все без исключения решения, которые придумывали люди, поэтому ниже приведены части моей текущей и рабочей версии System.x web.config

  <system.web>
    <compilation debug="true" defaultLanguage="c#" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" />
      </assemblies>
    </compilation>
    <authentication mode="Forms">
      <forms defaultUrl="/" loginUrl="/Authentication/Login" enableCrossAppRedirects="true" name=".GKAUTH" path="/" requireSSL="false" timeout="1440" />
    </authentication>
    <membership defaultProvider="GatekeeperMembershipProvider" userIsOnlineTimeWindow="120">
      <providers>
        <clear />
        <add name="GatekeeperMembershipProvider" type="Ewdev.Security.MembershipProviders.GatekeeperMembershipProvider, Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" connectionStringName="Ewdev Database" minRequiredPasswordLength="7" minRequiredAlphabeticCharacters="3" minRequiredAlphabeticCaseChanges="1" minRequiredNumericCharacters="1" minRequiredNonAlphanumericCharacters="0" passwordWordsPolicy="true" passwordHistoryPolicy="13" enablePasswordRetrieval="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" minRequiredUserNameLength="6" minRequiredUserNameAlphabeticCharacters="1" minRequiredUserNameNumericCharacters="0" userNameEnableNonAlphanumeric="true" userNameWordsPolicy="true" />
      </providers>
    </membership>
    <customErrors mode="On" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Linq" />
        <add namespace="System.Collections.Generic" />
      </namespaces>
    </pages>
    <trace enabled="false" mostRecent="true" />
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="true" />
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthentication" />
      <add name="FormsAuthentication" type="Ewdev.Security.GatekeeperFormsAuthenticationModule" />
    </modules>
  </system.webServer>
1 голос
/ 07 декабря 2010

Я не могу добавить комментарий к собственному ответу пользователя (слишком низкий рейтинг?).В любом случае, после долгой борьбы с моим сервером, пытаясь разрешить сообщения 403.14, я наткнулся на этот вопрос.Шаги в ответе наконец решили проблему для меня.

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

Многоеспасибо пользователю и stackoverflow:)

0 голосов
/ 01 октября 2010

Полагаю, вы неправильно установили MvcHttpHandler. Атрибут пути должен быть * вместо * .mvc

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