Как сохранить сеанс во время использования сайта с аутентификацией Owin?Скольжение выдоха не работает - PullRequest
0 голосов
/ 01 февраля 2019

У меня проблемы с поддержанием сеанса во время использования сайта.Мы используем Autin Authentication с обоими типами, UseWsFederationAuthentication и UseCookieAuthentication для подключения к серверу ADFS.

SessionState и время ожидания сеанса настроены на «N» минут, и большая проблема здесь заключается в том, что время ожидания не обновляетсяна каждый запрос.Пользователь может использовать сайт, но через "N" минут сервер возвращает ответ 401.

Это наша конфигурация сеанса web.config:

<sessionState timeout="2" cookieName="MB_SEID"></sessionState>

<authentication mode="None">
    <forms loginUrl="~/Home/Index" defaultUrl="/" path="/" name="UID" timeout="2" protection="All" slidingExpiration="true" enableCrossAppRedirects="true" />
</authentication>

Мы пыталисьмножество различных конфигураций для включения скользящего выдоха и установки ExpireTimeSpan.WSFederation настроен в пассивном режиме, чтобы предотвратить перенаправления для входа в систему на 401 ответах и ​​ручной обработки процесса повторной аутентификации.Наша наиболее полная конфигурация следующая:

public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(DefaultAuthenticationTypes.ApplicationCookie);
        app.UseCookieAuthentication(new CookieAuthenticationOptions {
            CookieManager = new SystemWebCookieManager(),
            SlidingExpiration = true,
            ExpireTimeSpan = TimeSpan.FromMinutes((double)sessionTimeout),
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            CookieName = CookieAuthenticationDefaults.CookiePrefix + DefaultAuthenticationTypes.ApplicationCookie,
            Provider = new CookieAuthenticationProvider
            {
                OnResponseSignIn = ctx =>
                {
                    ctx.Options.ExpireTimeSpan = TimeSpan.FromMinutes((double)sessionTimeout);
                    ctx.Options.SlidingExpiration = true;
                }
            }
        });

        app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
        {
            Wtrealm = realm,
            MetadataAddress = adfsMetadata,
            Wreply = replay,
            AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
            SignInAsAuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            UseTokenLifetime = false // set to false to manage session with the cookie middleware
        });
    }
...