Истечение срока действия сессии AzureAD и OpenIdConnect в веб-формах ASP.net - PullRequest
0 голосов
/ 11 октября 2018

У меня есть приложение ASP.net WebForms, которое я настроил для работы с Azure Active Directory и OpenIDConnect на основе этой статьи: http://www.cloudidentity.com/blog/2014/07/24/protecting-an-asp-net-webforms-app-with-openid-connect-and-azure-ad/

В общем, работает нормально.Но иногда, после длительного периода бездействия (например, заполнения большой формы), пользователь перенаправляется на главную страницу приложения, и его данные из формы теряются.Это, конечно, очень запутанно.

Кажется, что в какой-то момент сеанс (токен?) Истекает, и он должен пройти повторную аутентификацию.Мне удалось отследить HTTP 302 до https://login.windows.net/... в точке перенаправления.Таким образом, это подтвердило бы мое предположение о повторной аутентификации через AAD.

Я не могу точно сказать, как часто это происходит - для меня это не происходит регулярно.Я пытался воспроизвести это поведение, удалив файлы cookie AspNet.Cookies и ASP.NET_SessionId, но это не вызвало перенаправление.Взаимодействуя с приложением, мы просто автоматически воссоздали эти файлы cookie.

Мои вопросы:

  1. Есть ли какое-то другое место (локальное хранилище?), Где сохраняется информация о логине?
  2. Как я могу (в фоновом режиме, в фоновом режиме) убедиться, что сеанс / токен действителен?

1 Ответ

0 голосов
/ 12 октября 2018

В вашем коде инициализации, если вы следовали инструкциям в статье, на которую вы ссылались, есть строка примерно так:

app.UseCookieAuthentication(new CookieAuthenticationOptions());

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

appBuilder.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType ="Cookies",
    ExpireTimeSpan = TimeSpan.FromMinutes(60), // Expire after an hour
    SlidingExpiration = true // use sliding expiration..
});

Посмотрите документы, которые вы можете настроить - https://docs.microsoft.com/en-us/previous-versions/aspnet/dn385599(v%3Dvs.113)

Кроме того, событие будетвызывается всякий раз, когда он думает, что ему необходимо взаимодействовать с провайдером идентификации, опциями обработчика, доступными в объекте Уведомления в OpenIdConnectAuthenticationOptions.Вас может заинтересовать RedirectToIdentityProvider

private void ConfigureOpenIdConnect()
{
    var openIdConnectAuthenticationOptions = new OpenIdConnectAuthenticationOptions
    {
        // the rest of your settings....then
        Notifications =
            new OpenIdConnectAuthenticationNotifications
            {
              RedirectToIdentityProvider =
                    async context => await RedirectToIdentityProviderHandler(context)
            },
            UseTokenLifetime = false
    };
}            

private static Task RedirectToIdentityProviderHandler(
    RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
    // do some logging whenever you app is redirecting to the IDP
    return Task.FromResult(0);
}

UseTokenLifetime здесь интересен, так как ваш токен идентификации имеет время истечения, и по умолчанию время жизни файлов cookie в приложении соответствует времени жизнимаркер.Если вы хотите сами контролировать время жизни куки (согласно первому фрагменту кода), установите здесь значение false и явно контролируйте это сами.

Вы можете использовать комбинацию переопределения времени жизни идентификатора токена, более длительного срока действия файла cookie, установки скользящего истечения срока действия в значение true + некоторого входа в систему всякий раз, когда происходит перенаправление с поставщиком удостоверений.

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

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