Подтвердить что ты не робот

Как сделать проверку подлинности на чисто HTML-страницах с помощью ASP.NET?

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

Когда я переименовал файлы в .aspx, мне будет предложено ввести логин Я ничего не делаю. У меня очень простой логин script, и он должен просто перенаправить на 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>
4b9b3361

Ответ 1

В 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>

Ответ 2

Чтобы файлы 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 в IIS HTTP трубопровода, тем самым функциональность для всех запросов.

Ответ 3

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

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

Ответ 4

Хотя это старый вопрос, я считаю, что ссылка в 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 на требуемый.

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