Тайм-аут входа в веб-формы - PullRequest
0 голосов
/ 12 марта 2019

Я создал готовый проект Web Forms 4.5.2 с индивидуальными учетными записями пользователей. Я не могу заставить тайм-аут входа в систему работать. Я обновил Web.config, чтобы установить время ожидания на 12 минут:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login.aspx" timeout="12" slidingExpiration="true" 
        requireSSL="true" />
</authentication>

Я явно установил время ожидания сеанса на 20 минут, хотя я предполагаю, что это будет значение по умолчанию:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="20">

Это мое понимание , что с slidingExpiration, установленным в true, если истекшее время составляет больше, чем половина времени сеанса, время ожидания сбрасывается при обновлении браузера. Помимо slidingExpiration, тайм-аут просто не работает, так как я все еще вошел в систему при обновлении браузера через 12 минут.

Когда это не сработало, я посмотрел на файл Startup.Auth.cs и также изменил временной интервал до 12 минут. Я предположил, что это связано с истечением срока действия куки:

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login"),
        Provider = new CookieAuthenticationProvider
        {
            OnValidateIdentity = 
                SecurityStampValidator.OnValidateIdentity<ApplicationUserManager,
                ApplicationUser>(validateInterval: TimeSpan.FromMinutes(12),
                regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
        }
    });

Я использую локально установленный экземпляр SQL Server 2014:

<add name="DefaultConnection" 
    connectionString="Server=XXX;Database=abc;user ID=myself;password=myself123" 
        providerName="System.Data.SqlClient" />

В IIS состояние сеанса установлено на «В процессе», а настройки файлов cookie следующие:

enter image description here

Все еще не работает. Чего мне не хватает?

UPDATE

Я добавил самоподписанный сертификат на моей локальной машине разработчика, но все еще не мог получить тайм-аут на работу; постоянно вошел в систему. Должен ли я написать определенный код, чтобы получить эту функциональность? До сих пор я работал только со старой системой членства и не очень знаком с Оуэном / Катаной / Идентификацией / EF.

1 Ответ

0 голосов
/ 12 марта 2019

Я наконец-то понял это, хотя мне действительно нужно увеличить OWIN / Katana.

Прежде всего, я прокомментировал следующее из Web.config, потому что он использовался только в старом членствеsystem:

<!--<forms loginUrl="~/Account/Login.aspx" timeout="1" slidingExpiration="true" requireSSL="true" />-->

Далее я следовал этой статье для настройки времени ожидания аутентификации в коде Startup.cs:

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login"),
        Provider = new CookieAuthenticationProvider
        {
           OnValidateIdentity = 
           SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
             validateInterval: TimeSpan.FromMinutes(10),
             regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
        },
        SlidingExpiration = true,
        ExpireTimeSpan = TimeSpan.FromMinutes(20)
    });

Важно: Чтобы сделать это, мне пришлось вручную удалить старые куки в инструментах разработчика браузера.

ОБНОВЛЕНИЕ

Просто для пояснения, запись формы вФайл Web.config все еще используется системой членства Identity.Вы можете установить глобальное время ожидания там, но если вы хотите более детальный контроль, используйте приведенный выше фрагмент кода.

...