FormsAuthentication не работает - PullRequest
       2

FormsAuthentication не работает

0 голосов
/ 22 декабря 2009

У меня есть сайт, который работает, как и ожидалось, на моей коробке разработки. То есть срок действия бланка аутентификации истекает через 30 дней. Это достигается с помощью следующего кода

string roles = UserManager.getAuthenticationRoleString(txtUsername.Text);

HttpCookie formscookie = FormsAuthentication.GetAuthCookie(txtUsername.Text, true);

FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(formscookie.Value);

FormsAuthenticationTicket newticket = new FormsAuthenticationTicket(1, ticket.Name, DateTime.Now, DateTime.Now.AddDays(30), true, roles, ticket.CookiePath);

HttpCookie newCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(newticket));
newCookie.Expires = DateTime.Now.AddDays(30);
Response.Cookies.Add(newCookie);

Я использовал fiddler, чтобы проверить, что срок действия установлен правильно, и я получаю это

.ASPXAUTH=84AB5430CF4B1C5F9B59C9285288B41F156FCAFA2A169EACE17A7778A392FA69F66770FD8A08FFD06064B00F0BD788FEEC4A5894B7089239D6288027170A642B3B7EB7DB4806F2EBBCF2A82EE20FD944A38D2FE253B9D3FD7EFA178307464AAB4BCB35181CD82F6697D5267DB3B62BAD; expires=Thu, 21-Jan-2010 18:33:20 GMT; path=/; HttpOnly

Так что я ожидаю, что срок его действия истечет через 30 дней ... Но он длится всего около 30 минут.

У меня есть 3 других интересных момента о моей среде / коде

  1. В рабочей коробке есть два сайта, указывающие на один и тот же код, один для внешнего доступа и один для внутреннего доступа

  2. Когда я получаю страницу входа из-за преждевременного истечения срока действия, файл cookie .ASPAUTH все еще там и отправляется в браузер

  3. В global.asax есть некоторая проверка ролей, которая выглядит следующим образом

-

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {

        if (HttpContext.Current.User != null)
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated)
            {
                if (HttpContext.Current.User.Identity is FormsIdentity)
                {
                    FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                    FormsAuthenticationTicket ticket = id.Ticket;

                    // Get the stored user-data, in this case, our roles
                    string userData = ticket.UserData;
                    string[] roles = userData.Split('|');
                    HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
                }
            }
        }
    }

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Вам необходимо добавить тег ключа компьютера в файл web.config. Он восстанавливается, и это приводит к преждевременному таймауту.

Это похоже на следующий вопрос:

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

0 голосов
/ 22 декабря 2009

Если проблема заключается в том, что пользователь на рабочем ящике выгнан и должен снова войти в систему с помощью FormsAuthentication, возможно, проблема связана с IIS, а не .NET.

Раньше у меня возникали проблемы, когда все настройки времени ожидания в мире в приложении не имели значения, и пользователь загружался слишком рано.

Проверьте настройки IIS для веб-сайта и пула приложений. Есть настройки, связанные с таймаутами и т. Д.

Если II6:

  • В свойствах веб-сайта -> вкладка "Домашний каталог" -> кнопка "Настройка" -> вкладка "Параметры" -> здесь есть информация о состоянии / продолжительности сеанса *
  • В пуле приложений для вашего сайта -> вкладки "Производительность и здоровье" -> оба имеют несколько параметров, которые могут перезапустить ваш пул (и, по сути, принудительно выполнить повторный вход в систему)

Для отладки вы можете отключить все проверки работоспособности и производительности в пуле, однако будьте очень осторожны, поскольку это может привести к перегрузке вашего сервера, если приложение выйдет из-под контроля.

Вы также можете попробовать поместить настройки тайм-аута в web.config:

<system.web>
    <authentication mode="Forms">
          <forms timeout="XXXXX"/>
    </authentication>
</system.web>

Во всяком случае, просто некоторые идеи из личного опыта подобных вопросов. Надеюсь, это поможет!

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