Как выполнить проверку подлинности с помощью форм на чисто HTML-страницах с использованием ASP.NET? - PullRequest
18 голосов
/ 28 августа 2010

Я использую проверку подлинности с помощью форм в IIS7 для защиты паролем сайта разработчика, но кажется, что проверка подлинности обходится, когда сайт содержит только статический HTML файлы + login.aspx + web.config.

Когда я переименовал файлы в .aspx, меня попросили ввести форму для входа. Я не делаю ничего необычного.У меня очень простой скрипт входа в систему, и он должен просто перенаправить на index.html потом.

Есть предложения?Подводя итог, можно сказать, что весь сайт использует HTML (пока) и должен быть защищен паролем.

<authentication mode="Forms">
  <forms name="appNameAuth" path="/" loginUrl="~/login.aspx" defaultUrl="index.html" protection="All" timeout="525600">
    <credentials passwordFormat="Clear">
      <user name="[user]" password="[password]" />
    </credentials>
  </forms>
</authentication>
<authorization>
  <deny users="?" />
</authorization>

Ответы [ 4 ]

10 голосов
/ 24 октября 2010

В IIS7, если вы хотите защитить файлы * .html или * .htm (или другие расширения не .net) при проверке подлинности с помощью форм, добавьте следующие строки в ваш файл web.config:

<compilation>
    <buildProviders>
        <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
        <add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
    </buildProviders>
</compilation>

И

<system.webServer>
     <handlers>
         <add name="HTML" path="*.html" verb="GET, HEAD, POST, DEBUG"   type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
         <add name="HTM" path="*.htm" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
     </handlers>
</system.webServer>
10 голосов
/ 28 августа 2010

Чтобы файлы HTML были заблокированы вашей аутентификацией форм, вам нужно, чтобы они обслуживались ASP.NET.Вы можете сделать это в IIS, связав необходимые расширения (например, .html, .htm и т. Д.) С aspnet_isapi.dll.

Onces ASP.NET обслуживает эти файлы, для них можно указать разрешения, как и для любой страницы aspx.

Для получения дополнительной информации см. MSDN :

По умолчанию IIS обрабатывает сам статический контент - например, HTML-страницы, CSS-файлы и файлы изображений - и передает запросы во время выполнения ASP.NET только при наличии страницы с расширением .aspx, .asmx или .ashx.запрашивается

Однако IIS 7 допускает интегрированные конвейеры IIS и ASP.NET.С помощью нескольких параметров конфигурации вы можете настроить IIS 7 для вызова FormsAuthenticationModule для всех запросов.Кроме того, с IIS 7 вы можете определить правила авторизации URL для файлов любого типа.Дополнительные сведения см. В разделах Изменения между IIS6 и IIS7 Security, Безопасность вашей веб-платформы и Общие сведения об авторизации URL IIS7.

Короче говоря, в версиях, предшествующих IIS 7, можно использовать только проверку подлинности с помощью форм для защиты обрабатываемых ресурсовво время выполнения ASP.NET.Аналогично, правила авторизации URL-адресов применяются только к ресурсам, обрабатываемым средой выполнения ASP.NET.Но с IIS 7 можно интегрировать FormsAuthenticationModule и UrlAuthorizationModule в HTTP-конвейер IIS, тем самым расширяя эту функциональность для всех запросов.

2 голосов
/ 11 мая 2016

Хотя это старый вопрос, я нахожу ссылку в ответе pomarc очень полезной. Ниже приведено резюме, которое подходит для IIS7.

В вашем web.config добавьте или измените <handlers> в <system.webServer>:

<handlers>
  <add name="HTML" path="*.html" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" />
</handlers>

Замените verb значение на требуемое; scriptProcessor значение с правильным путем вашей среды.

Затем добавьте или измените <compilation> и <httpHandlers> в <system.web>:

<compilation debug="false" strict="false" explicit="true">
  <buildProviders>
    <!--Add below so .html file will be handled by ASP.NET (for use of Forms Authentication)-->
    <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
  </buildProviders>
</compilation>
<httpHandlers>
  <!--Add below so .html file will be handled by ASP.NET (for use of Forms Authentication)-->
  <add verb="GET, HEAD, POST, DEBUG" path="*.html" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>

Замените verb значение на требуемое.

Вы также можете включить дополнительные расширения, разделенные запятой ','

1 голос
/ 15 октября 2010

Я решил ту же проблему несколько дней назад, следуя сообщению от fr33m3 @ 21.11.2007, 15:19 в этой теме: http://forums.asp.net/t/1184547.aspx выполните все шаги от 2. до5. и все готово!

надеюсь, это поможет вам, как помогло мне.

...