Аутентификация форм, игнорирующая документ по умолчанию - PullRequest
32 голосов
/ 29 сентября 2010

Я провел полтора дня, пытаясь решить эту проблему. В основном есть сайт 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">

Большое спасибо за ваше время и надеюсь, что кто-то знает, что здесь происходит.

Ответы [ 7 ]

38 голосов
/ 05 апреля 2011

Это было мое решение:

В Global.asax, метод: Application_BeginRequest, поместите следующее:

if (Request.AppRelativeCurrentExecutionFilePath == "~/")  
   HttpContext.Current.RewritePath("HomePage.aspx");

Красиво и просто, и у вас есть шанс построить логикувокруг какой домашней страницы вы хотите использовать, если ваш сайт использует несколько домашних страниц на основе переменных конфигурации.

Dmitry.Alk

8 голосов
/ 07 июля 2011

Я столкнулся с той же проблемой, когда пытался найти корневой путь, и я пробовал все ранее упомянутое.Похоже, 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>

Дополнительная информация

Microsoft KB

Как обрабатываются URL без расширений в asp net v4

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

В конечном итоге я решил написать несколько строк кода на странице входа в систему, чтобы проверить Request.QueryString ["ReturnUrl"] из "/". Если он обнаружил это, он перенаправляется на 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");
    }
}
3 голосов
/ 30 сентября 2010

У меня была похожая проблема. Нет стилей, когда я не вошел в систему, www.site.nl \ перенаправили на страницу входа (с URL-адресом перенаправления на домашнюю страницу) и введите www.site.nl \ Home (та же домашняя страница, что и упомянутый URL-адрес перенаправления) до) не нужно было войти.

Решение было:

  • Открыть IIS
  • Открыть IIS: аутентификация
  • Открытие и редактирование анонимного доступа
  • Проверка пользователя (я изменил пользователя на пользователя app.pool)
  • Предоставление прав пользователя в корне сайта (в файловой системе)

Это сработало для меня.

Удачи

1 голос
/ 26 мая 2011

Решение Йохана работало для меня, но только если запрос был для корня сайта.

Мой сайт организован так:

  • 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 для начала.Но теперь я знаю, почему это не удается.Похоже, вам нужен анонимный доступ к каталогам, в которых вы хотите использовать документы по умолчанию.

0 голосов
/ 25 января 2013

Я столкнулся с той же проблемой и решил следующим образом:

в 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");
0 голосов
/ 16 декабря 2010

У меня была похожая проблема сегодня. Я пытался использовать интегрированный конвейер для защиты ресурсов 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/

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