Аутентификация форм, игнорирующая документ по умолчанию
Я провел полтора дня, пытаясь решить эту проблему. В основном есть сайт ASP.net с проверкой подлинности с помощью форм на IIS7 с использованием Framework 4.0.
Компонент авторизации, кажется, работает идеально для каждого сценария, за исключением удара по нему без указания документа (следует разрешить до документа по умолчанию).
Например (пожалуйста, не будьте грубыми на сайте, он все еще разрабатывается;)), http://www.rewardroster.com/Default.aspx работает отлично, эта страница должна разрешать любой доступ, как указано в web.config.
но если я нажму www.rewardroster.com напрямую, он будет перенаправлен на страницу входа с URL-адресом возврата, установленным на "/", или Login.aspx?ReturnUrl=%2f
Некоторые вещи, которые я пробовал:
1) Установите для параметра "Аутентификация" значение "Нет", а затем документ по умолчанию сработает, так что это не проблема.
2) Добавлен атрибут DefaultDocument в Web.config
3) Удалены все записи в списке документов по умолчанию в IIS, кроме Default.aspx.
4) Добавлена запись MachineKey в Config
5) Переключение с интегрированного на классический конвейер в IIS
Вот что в моей конфигурации:
<authentication mode="Forms">
<forms name="appNameAuth" loginUrl="Login.aspx" protection="All" timeout="60" slidingExpiration="true" defaultUrl="Default.aspx" path="/">
</forms>
</authentication>
</authentication>
<location path="Default.aspx">
Большое спасибо за ваше время и надеюсь, что кто-то знает, что здесь происходит.
8 ответов
Это было мое решение:
В Global.asax
, метод: Application_BeginRequest
, поместите следующее:
if (Request.AppRelativeCurrentExecutionFilePath == "~/")
HttpContext.Current.RewritePath("HomePage.aspx");
Красиво и просто, и у вас есть возможность построить логику вокруг того, какую домашнюю страницу вы хотите использовать, если ваш сайт использует несколько домашних страниц на основе переменных конфигурации.
Dmitry.Alk
Я столкнулся с этой же проблемой при попытке найти корневой путь и попробовал все ранее упомянутое. Похоже, Asp.net 4.0 добавляет два модуля ExtensionlessUrl в applicationhost.config для IIS 7. Вы можете удалить эти модули, добавив в ваш web.config следующее
<system.webServer>
<handlers>
<remove name="ExtensionlessUrl-Integrated-4.0"/>
<remove name=" ExtensionlessUrl-ISAPI-4.0_32bit "/>
</handlers>
</system.webServer>
Дополнительная информация
У меня была похожая проблема. Нет стилей, когда я не вошел в систему, www.site.nl\ перенаправили на страницу входа (с URL-адресом перенаправления на домашнюю страницу) и введите www.site.nl\Home (та же самая домашняя страница, что и упомянутый URL-адрес перенаправления) до) не нужно входить в систему.
Решение было:
- Откройте IIS
- Open IIS: аутентификация
- Открыть и редактировать анонимный доступ
- Проверьте пользователя (я изменил пользователя на пользователя app.pool)
- Предоставить права пользователя в корне сайта (в файловой системе)
Это сработало для меня.
Удачи
В итоге я решил написать несколько строк кода на своей странице входа в систему, чтобы проверить Request.QueryString["ReturnUrl"] of "/". Если он обнаружил это, он перенаправляется на default.aspx.
Я не смог найти ЛЮБОГО способа заставить аутентификацию форм не перехватывать вызовы без указанной страницы (например, www.mysite.com).:(Я даже попробовал.NET 4 URL Routing, и это не помешало Аутентификации с помощью форм перехватить запрос.
Ниже приведен код, который я использовал в login.aspx:
protected void Page_Load(object sender, EventArgs e)
{
if (!(IsPostBack || IsAsync))
{
string returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl != null)
if (returnUrl == "/")
Response.Redirect("default.aspx");
}
}
Решение Йохана сработало для меня, но только если запрос был для корня сайта.
Мой сайт организован так:
- WWW. [MySite].com/login.aspx
- WWW. [MySite].com/default.aspx
- WWW. [MySite].com/[somestuff]/default.aspx
- WWW. [MySite].com/[morestuff]/default.aspx
После того, как Йохан последовал хорошему совету, запросы к www. [Mysite].com были направлены на страницу входа в формы, а после входа - на страницу по умолчанию. Однако, если кто-то запросит "/[somestuff]/", он все равно не будет работать.
Я заставил его работать, включив анонимную аутентификацию в каталогах [somestuff] и [morestuff], а затем отключив ее для отдельных файлов в этих каталогах. Это не настройка безопасности, которую я хочу поддерживать, учитывая, что люди могут получить то, что им нужно, из default.aspx или просто запросить [somestuff] /default.aspx для начала. Но теперь я знаю, почему это не удается. Кажется, вам нужен анонимный доступ к каталогам, в которых вы хотите использовать документы по умолчанию.
У меня была похожая проблема сегодня. Я пытался использовать интегрированный конвейер для защиты ресурсов non-asp.net (статические файлы, php и т. Д.).
У меня было корневое правило web.config, которое имело, тогда я разрешал доступ к определенным ресурсам в каждом конкретном случае.
Это работало, за исключением того, что запросы к "/" никогда не могли быть аутентифицированы (бесконечное перенаправление на страницу входа в систему), в то время как запросы к "/Default.aspx" были в порядке.
Моя проблема заключалась в том, что модуль Asp.Net UrlAuthentication был включен для всех типов ресурсов, и, очевидно, это не работает для моего сценария. Вместо этого мне пришлось изменить этот модуль, чтобы он работал только для управляемых ресурсов и установить неуправляемую аутентификацию URL-адреса IIS7. Затем мне пришлось настроить это (поскольку он использует другие параметры аутентификации) и убедиться, что RoleManager был включен для неуправляемых ресурсов (так как я проходил аутентификацию по ролям). Этот URL может быть полезен: http://learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/
Я столкнулся с той же проблемой и решил следующим образом:
В Global.asax рядом с решением Dmitry.Alk я добавил:
if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/default.aspx")
HttpContext.Current.RewritePath("Default.aspx");
if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/")
HttpContext.Current.RewritePath("Default.aspx");
if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~")
HttpContext.Current.RewritePath("Default.aspx");
Я решил это, добавив разрешения на чтение, чтение и выполнение, список содержимого папки для пользователя IUSR в Windows Server 2019 и IIS 10.