Проверка подлинности с помощью форм и IIS7 (& MVC): почему ReturnUrl = / добавляется? - PullRequest
2 голосов
/ 23 июня 2010

При попытке получить доступ к моему сайту:

www.X.com

Браузер изменяет URL-адрес на:

www.X.com /

Проблема в том, что URL-адрес результата:

www.X.com / HomePage.aspx? ReturnUrl = /

(HomePage.aspx - страница по умолчанию)

В IE: www.X.com/HomePage.aspx?ReturnUrl=%2f

По какой-то причине проверка подлинности с помощью форм обрабатывает / как страницу, к которой пользователь пытается получить доступ, а затем перенаправляет на: HomePage.aspx? ReturnUrl = /

Как настроить проверку подлинности с помощью форм (или маршрутизацию MVC), чтобы она не воспринималась как страница, поэтому при доступе к www.X.com она не изменит URL-адрес?

Сайт работает на Windows Server 2008 IIS7, .NET 4.

(При работе на IIS6 такой проблемы не было)

Web.config:

<authentication mode="Forms">
            <forms name=".AUTHCOOKIE" loginUrl="HomePage.aspx" defaultUrl="Loading.aspx" timeout="9480" />
  </authentication>

MVC Routing (не уверен, что это связано):

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.ascx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.gif/{*pathInfo}");

        routes.MapRoute("Actions", "A/{controller}/{action}", new { controller = "Tasks", action = "InitPage" });

    }

Спасибо

Рафаэль

Ответы [ 6 ]

3 голосов
/ 12 марта 2011

Первый шаг: Вы можете установить файлы веб-конфигурации следующим образом:

<authentication mode="Forms">
    <forms name=".AUTHCOOKIE" loginUrl="/" defaultUrl="Loading.aspx" timeout="9480" />
</authentication>

Шаг 2: Будут ли настройки веб-сервера (IIS) по умолчанию для документа «Загрузка. Aspx»

2 голосов
/ 14 июня 2013

Добавьте разрешение на доступ к вашей странице входа, например:

 <location path="Login.aspx">
<system.web>
  <authorization>
    <allow users="*" />
  </authorization>
</system.web>

и тег формы:

<forms name="SecurityAuthentication" path="/"  loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" timeout="60" />
2 голосов
/ 11 февраля 2012

Добавить в глобальный asax. У меня была похожая проблема, и это, похоже, исправило ее.

Private Sub Global_asax_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BeginRequest
    If (Request.AppRelativeCurrentExecutionFilePath.ToLower = "~/".ToLower) Then
        HttpContext.Current.RewritePath("/Index.aspx")
    End If
End Sub

ТАКЖЕ убедитесь, что path = "/" не присутствует в вашем коде аутентификации блок

    <authentication mode="Forms">
        <forms name=".ASPXAUTH" loginUrl="Index.aspx" defaultUrl="default.aspx" timeout="60"/>
    </authentication>

* примечание. Вы можете конвертировать vb.net в c # здесь http://www.developerfusion.com/tools/convert/vb-to-csharp/

1 голос
/ 23 июня 2010

На самом деле, когда вы открываете http://www.x.com,, вы запрашиваете http://www.x.com/. Когда вы перенаправляетесь на форму проверки в IIS / .Net, RedirectTo = всегда добавляется в конце URL, поэтомучто сервер знает, куда вы хотели пойти до того, как ваш запрос был перехвачен.

Или, другими словами: все работает так, как ожидалось.Что именно вы хотите сделать?

Если это поможет, я вижу две странности в коде, который вы включили:

  • Страница входа называется HomePage.aspx.Это ... необычно (с таким именем HomePage.aspx должна быть страницей, на которую вы переходите после входа, а не страницей входа).Кроме того, вы упоминаете MVC, но это не маршрут MVC.
  • Ваш единственный маршрут в Global.asax начинается с "A /", поэтому http://www.x.com/ не будет им захвачен.Если ваша стартовая страница должна быть http://www.x.com/A/Tasks/InitPage,, либо сделайте A параметром маршрута {что угодно} и присвойте ему значение по умолчанию, либо создайте другой MapRoute, который захватывает запрос "/" и перенаправляет на правильный путь.Вероятно, добавление Default.aspx в проект будет работать, но это будет очень не MVC.
0 голосов
/ 21 декабря 2016

В моем случае мне пришлось переключить свой AppPool "Managed Pipeline Mode" обратно с "Integrated" на "Classic".

0 голосов
/ 07 ноября 2015

Где-то в login.aspx.cs поместите следующее утверждение:

if (Request.QueryString["ReturnUrl"] != null && Request.QueryString["ReturnUrl"] != "/")
    {
        Response.Redirect(Request.QueryString["ReturnUrl"]);
    }

Наиболее важной частью является это условие:

Request.QueryString["ReturnUrl"] != "/"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...