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

Идентификация форм Игнорирование документа по умолчанию

Я потратил полтора дня, пытаясь решить эту проблему. На веб-сайте ASP.net с помощью проверки подлинности на основе IIS7 с помощью Framework 4.0 есть веб-сайт ASP.net.

Кажется, что материал авторизации работает отлично для каждого сценария, за исключением того, что он ударил его без указания документа (должен разрешить Doc по умолчанию).

Например (пожалуйста, не будьте суровы на сайте, он все еще будет развиваться;)), http://www.rewardroster.com/Default.aspx работает отлично, эта страница должна разрешать доступ anon, как указано в web.config.

но если я попал на сайт www.rewardroster.com Непосредственно перенаправляется на страницу входа с URL-адресом Return, установленным в "/" или Login.aspx? ReturnUrl =% 2f

Некоторые вещи, которые я пробовал:

1) Установите для параметра "Аутентификация" значение "Нет", а затем обработал документ по умолчанию, поэтому проблема не возникает.

2) Добавлен атрибут DefaultDocument для Web.config

3) Удалены все записи для списка документов по умолчанию в IIS, кроме Default.aspx

4) Добавлена ​​запись MachineKey в Config

5) Переключен от конвейера Integrated to Classic в 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">

                      

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

4b9b3361

Ответ 1

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

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

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

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

Dmitry.Alk

Ответ 2

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

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

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

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

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

Удачи.

Ответ 4

Что я решил сделать, это написать несколько строк кода на моей странице входа, чтобы проверить Request.QueryString [ "ReturnUrl" ] на "/". Если он обнаружил, что он перенаправлен на default.aspx.

Я не мог найти ЛЮБОЙ способ сделать проверку подлинности без перехвата вызовов без указанной страницы (например, www.mysite.com).:( Я даже попробовал .NET 4 URL Routing, и это не мешало аутентификации Forms от угона запроса.

Ниже приведен код, который я использовал в 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");
    }
}

Ответ 5

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

Мой сайт организован следующим образом:

  • WWW. [MySite].com/login.aspx
  • WWW. [MySite].com/default.aspx
  • WWW. [MySite].com/[somestuff]/default.aspx
  • WWW. [MySite].com/[morestuff]/default.aspx

После правильного совета Johan, запросы на www. [mysite].com были направлены на страницу входа в формы и после входа в систему по умолчанию. Однако, если кто-то запросил "/[somestuff]/", он все равно не сработает.

Я получил его для работы, включив анонимную аутентификацию в каталогах [somestuff] и [morestuff], а затем отключив его в отдельных файлах в этих каталогах. Это не настройка безопасности, которую я хочу поддержать, поскольку люди могут либо получить, куда они идут от default.aspx, либо просто запросить [somestuff]/default.aspx для начала. Но теперь я знаю, почему он терпит неудачу. Кажется, вам нужен анонимный доступ в каталогах, по которым вы хотите использовать документы по умолчанию.

Ответ 6

У меня была аналогичная проблема сегодня. Я пытался использовать интегрированный конвейер для защиты ресурсов nonasp.net(статические файлы, php и т.д.).

У меня было правило в моем корневом web.config, который имел, тогда я предоставлял доступ к конкретным ресурсам в каждом конкретном случае.

Это сработало, за исключением того, что запросы на "/" никогда не могли быть аутентифицированы (бесконечно перенаправляются на страницу входа), в то время как запросы к "/Default.aspx" были в порядке.

Моя проблема заключалась в том, что модуль Asp.Net UrlAuthentication был включен для всех типов ресурсов, и, по-видимому, это не работает для моего сценария. Вместо этого мне пришлось изменить этот модуль для работы только с управляемыми ресурсами и установить аутентификацию IIS7 с неконтролируемым URL. Затем мне пришлось настроить это (поскольку он использует разные параметры проверки подлинности) и убедитесь, что RoleManager включен для не управляемых ресурсов (поскольку я выполнял аутентификацию по ролям). Этот URL-адрес может быть полезен: http://learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/

Ответ 7

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

в 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");