Как сделать проверку подлинности на чисто 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>
Ответы
Ответ 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
на требуемый.
Вы также можете включить большее расширение, разделенное запятой ','