2017-01-10 20 views
4

По какой-то причине пользователи получают перенаправление обратно на login.microsoftonline.com почти каждые 10/20 минут. Это довольно раздражает, так как приведенный ниже код используется для входа в систему для пользователей CMS.Пользователи выходят из системы каждые 10-20 минут (аутентификация претензий)

Может ли кто-нибудь сказать мне, что не так, со следующим кодом и почему наши пользователи выходят из системы/перенаправляются обратно на login.microsoftonline.com? Срок службы сеанса равен 60 минутам, поэтому он должен быть чем-то с самой авторизацией.

Должны ли мы использовать WsFederationAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType или DefaultAuthenticationTypes.ApplicationCookie?

Мы хотим, чтобы пользователи могли войти используя форму (/ счет/inloggen) или с помощью кнопки под названием «Azure SSO» (который является внешним Войти)

public void ConfigureAuth(IAppBuilder app) 
{ 
    // Configure the db context and user manager to use a single instance per request 
    app.CreatePerOwinContext(ApplicationDbContext.Create); 
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 

    // Enable the application to use a cookie to store information for the signed in user 
    // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
    // Configure the sign in cookie 

    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/account/inloggen"), 
    Provider = new CookieAuthenticationProvider 
    { 
     OnResponseSignIn = ctx => 
     { 
     ctx.Identity = TransformClaims(ctx.Identity); 
     ctx.Properties.ExpiresUtc = DateTimeOffset.UtcNow.AddDays(7.0); 
     }, 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
           validateInterval: TimeSpan.FromMinutes(30), 
           regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    }, 
    ExpireTimeSpan = TimeSpan.FromDays(7.0), 
    SlidingExpiration = true 
    }); 

    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
    Provider = new CookieAuthenticationProvider 
    { 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    }, 
    ExpireTimeSpan = TimeSpan.FromDays(7.0), 
    SlidingExpiration = true 
    }); 

    app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions 
    { 
    MetadataAddress = "https://login.microsoftonline.com/xxxxxxxxxxxxxx/federationmetadata.xml", 
    Wtrealm = "https://portal.domain.com", 
    Caption = "Azure SSO", 
    SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType, 
    UseTokenLifetime = false, 
    AuthenticationMode = AuthenticationMode.Passive 
    }); 

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 
} 

Когда и почему мы должны использовать это?

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

Как вы могли заметить, они были довольно новыми для всего этого. Я просмотрел переполнение стека и множество примеров в Googled, но нет четкого ответа/учебника, в котором объясняются разные типы полномочий, их свойства и способы их использования.

ответ

0

Ваш валидаторInterval: TimeSpan.FromMinutes (30) установлен на 30 минут.

validateInterval - это не то же самое, что и истекающие файлы cookie на определенную временную известность. Например, пользователь регистрируется в местоположении A, затем переходит в местоположение B и подписывается и изменяет пароль. Затем они возвращаются в место A через 30 минут. Они будут подписаны.

SecurityStampValidator создается в любое время при создании/изменении пароля или добавляется/удаляется внешний вход .

Источник: http://www.jamessturtevant.com/posts/ASPNET-Identity-Cookie-Authentication-Timeouts/

Надеется, что это помогает.

+0

Благодарим вас за ответ. Однако он установлен на 30 минут, и текущий пользователь выходит из системы каждые 10-20 минут, а для SlidingExpiration установлено значение true. Почему пользователи выходят из системы, хотя включена функция SlidingExpiration? Будет ли функция регенерацииIdentity генерировать новую действительную идентификацию? Я не могу думать ни о чем другом. – Robin