Проблема перенаправления страницы входа в ASP.NET - PullRequest
5 голосов
/ 10 июня 2010

Я создаю приложение silverlight, размещенное в ASP.NET Web App. / IIS7 / веб-сайт с поддержкой SSL.
В целях безопасности я поместил свою страницу Silverlight в папку «Члены» в веб-приложении ASP.NET и ограничил доступ от анонимных пользователей (см. Web.config ниже)

когда пользователи пытаются получить доступ к страницам в папке «Участники», они перенаправляются на https://www.ssldemo.com/authenticationtest/login.aspx. (см. Web.config ниже) (Я сопоставил www.ssldemo.com с 127.0.0.1). для безопасности я переключаюсь на HTTPS в login.aspx и обратно на HTTP после проверки. ниже приведен код для login.aspx.cs.

    protected void Page_Load(object sender, EventArgs e)
    {
        LoginControl.LoggedIn += new EventHandler(LoginControl_LoggedIn);
    }

    void LoginControl_LoggedIn(object sender, EventArgs e)
    {
        //for going to ReturnURL & switching back to HTTP
        string serverName = HttpUtility.UrlEncode(Request.ServerVariables["SERVER_NAME"]);
        string returnURL = Request["ReturnURL"];
        Response.Redirect(ResolveClientUrl("http://" + serverName + returnURL)); 
    }

Проблема в том, что при развертывании другого приложения на http://www.ssldemo.com/authenticationtest/members/AnotherApplication/ и откройте http://www.ssldemo.com/authenticationtest/members/AnotherApplication/default.aspx, Пользователи перенаправляются на https://www.ssldemo.com/authenticationtest/login.aspx?ReturnUrl=%2fauthenticationtest%2fmembers%2fanotherapplication%2fdefault.aspx. но даже когда я ввожу правильные учетные данные на странице входа, я снова перенаправляюсь на ту же страницу входа , а не на ReturnUrl. когда я заглянул в скрипач, там было написано: «302 объект переехал сюда».

Спасибо за чтение! Любой вклад будет высоко ценится.

<configuration>
<connectionStrings>
    <add name="CompanyDatabase" connectionString="Data Source=192.168.0.2;Initial Catalog=SomeTable;User ID=Username;Password=P@ssword" />
</connectionStrings>

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
        <forms slidingExpiration="true" timeout="15"
               loginUrl="https://www.ssldemo.com/authenticationtest/login.aspx"
               defaultUrl="~/Members/Default.aspx"
               >
        </forms>
    </authentication>
    <!--Custom Membership Provider-->
    <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="15">
        <providers>
            <clear />
            <add name="MyMembershipProvider"
                 type="AuthenticationTest.Web.MyMembershipProvider"
                 connectionStringName="CompanyDatabase"
                 applicationName="AuthenticationTest.Web"/> 
        </providers>
    </membership>
</system.web>
<!--securing folders-->
<location path="Members">
    <system.web>
        <authorization>
            <deny users="?"/>
        </authorization>
    </system.web>
</location>    
</configuration>

1 Ответ

4 голосов
/ 07 апреля 2011

Приложение ниже членов (вспомогательное приложение) наследует настройки от вышеупомянутого, поэтому оно выбирает ваши настройки авторизации, поэтому оно переходит на эту страницу входа в систему.делать с тем, как зашифрован билет.Билеты не могут быть повторно использованы между приложениями, если вы не выполните дополнительную настройку.Это останавливает аутентификацию пользователя в одном приложении, а затем доступ к любому другому приложению на сервере.Asp.Net делает это путем создания нового случайного ключа для каждого приложения.

Сначала вам нужно добавить enableCrossAppRedirects = true к элементу формы.Затем вам нужно установить одинаковый MachineKey в обоих приложениях, чтобы оба приложения могли декодировать аутентификационные заявки.

Эта страница может помочь http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

...