authCookie не защищен в global.asax - PullRequest
2 голосов
/ 07 августа 2010

У меня проблема со входом в систему.

Сначала я использую SSL во время регистрации.

Когда я вхожу в систему, я создаю cookie, как это. когда я проверяю, если это безопасно, ответ да.

FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,                          // version
                                                   UserName.Text,           // user name
                                                   DateTime.Now,               // creation
                                                   DateTime.Now.AddMinutes(60),// Expiration
                                                   false,                      // Persistent 
                                                   role);         // User data

                    // Now encrypt the ticket.
                    string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

                    // Create a cookie and add the encrypted ticket to the
                    // cookie as data.
                    HttpCookie authCookie =
                                 new HttpCookie(FormsAuthentication.FormsCookieName,
                                                encryptedTicket);

                    if (authCookie.Secure)
                    {
                        new GUIUtility().LogMessageToFile("The cookie is secure with SSL.");
                        // Add other required code here.
                    }

                    authCookie.Secure = FormsAuthentication.RequireSSL;

                    // Add the cookie to the outgoing cookies collection.
                    HttpContext.Current.Response.Cookies.Add(authCookie);

                    // Redirect the user to the originally requested page 
                    Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName.Text,false));

, затем он перенаправляется на страницу global.asax с таким кодом:

string cookieName = FormsAuthentication.FormsCookieName.ToString();
        HttpCookie authCookie = Context.Request.Cookies[cookieName];

        try
        {
            new GUIUtility().LogMessageToFile(cookieName + authCookie.Secure);
        }
        catch (Exception)
        {
            //
        }

здесь я получаю cookieName как «.ASPXAUTH» и значение authCookie.Secure как False. Почему это происходит, я хочу, чтобы значение authCookie.Secure было истинным.

Есть предложения? спасибо

мой веб-конфиг имеет это:

<authentication mode="Forms">
        <forms loginUrl="Login.aspx" defaultUrl="~/Default.aspx" slidingExpiration="true" timeout="120" path="/" requireSSL="true" protection="All">
        </forms>
    </authentication>
<httpCookies requireSSL="true"/>
    <authorization>
        <deny users="?"/>
        <!--<allow users="*"/>-->
    </authorization>

Ответы [ 2 ]

1 голос
/ 11 августа 2010

Ограничение подключения Cookie-файлов к HTTPS для аутентификации

Файлы cookie поддерживают свойство «secure», которое определяет, должны ли браузеры отправлять cookie-файлы обратно на сервер.С установленным параметром secure cookie отправляет браузер только на защищенную страницу, запрашиваемую по URL-адресу HTTPS.

Если вы используете .NET Framework версии 1.1, установите свойство secure с помощью requireSSL =Значение true для элемента выглядит следующим образом:

<forms loginUrl="Secure\Login.aspx"
   requireSSL="true" . . . />

Если вы используете .NET Framework версии 1.0, установите свойство secure вручную в обработчике события Application_EndRequest в Global.asax, используя следующий код:

protected void Application_EndRequest(Object sender, EventArgs e) 
 {
string authCookie = FormsAuthentication.FormsCookieName;

foreach (string sCookie in Response.Cookies) 
 {
if (sCookie.Equals(authCookie))
{ 
  // Set the cookie to be secure. Browsers will send the cookie
  // only to pages requested with https
  Response.Cookies[sCookie].Secure = true;
}

}}

поэтому, по моему мнению, первый вариант не работает в веб-конфигурации, поэтому я делаю это вручную, что является вторым вариантом в коде ..

Пожалуйста, предложите.

1 голос
/ 10 августа 2010

Вы перенаправляете при входе в систему не-SSL-ресурс? Если это так, то файл cookie, созданный вами в первом фрагменте кода, использовать не следует, поскольку он является безопасным файлом cookie и, следовательно, применим только к соединениям SSL (т. Е. Вы явно сказали, что его не следует отправлять не-SSL). запросы, это то, что делает .Secure), и, следовательно, новый файл cookie будет создан. Я ожидал бы, что это также не будет включать стоимость билета.

В этом случае вы захотите либо:

  1. Хранить с SSL с момента входа в систему.
  2. Жить с риском кражи сеанса (существуют и другие способы снижения этого риска).
  3. Используйте протокол аутентификации, такой как дайджест или NTLM, который позволяет выполнять вызов-ответ и позволяет вам быстрее завершить вход без участия пользователя (поскольку браузер выполняет для вас второй вход).
...