2017-01-10 1 views
4

Pour une raison quelconque, les utilisateurs sont redirigés vers login.microsoftonline.com presque toutes les 10/20 minutes. C'est assez ennuyeux, puisque le code ci-dessous est utilisé pour connecter les utilisateurs à un CMS.Les utilisateurs se déconnectent toutes les 10 à 20 minutes (authentification des revendications)

Quelqu'un pourrait-il me dire ce qui ne va pas avec le code suivant et pourquoi nos utilisateurs se déconnectent/redirigent vers login.microsoftonline.com? La durée de vie de la session est fixée à 60 minutes, il doit donc s'agir de quelque chose avec l'autorisation elle-même.

Devrions-nous utiliser WsFederationAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType ou DefaultAuthenticationTypes.ApplicationCookie?

Nous voulons permettre aux utilisateurs de se connecter en utilisant un formulaire (/ compte/inloggen) ou à l'aide d'un bouton appelé « Azure SSO » (qui est une connexion externe)

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); 
} 

Quand et pourquoi devrions-nous utiliser ce?

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

Comme vous l'avez peut-être remarqué im assez nouveau à tout cela. J'ai parcouru le débordement de pile et googlé beaucoup d'exemples, mais il n'y a pas de réponse/tutoriel clair qui explique les différents types d'autorisation, leurs propriétés et comment ils sont utilisés.

Répondre

0

Votre valeur validateInterval: TimeSpan.FromMinutes (30) est définie sur 30 minutes. ValidateInterval n'est pas la même chose que l'expiration des cookies sur une période de temps donnée. Par exemple, un utilisateur se connecte à l'emplacement A, puis se rend à l'emplacement B et se connecte et modifie le mot de passe. Puis ils reviennent à la position A après 30 minutes. Ils seront déconnectés. SecurityStampValidator est créé chaque fois qu'un mot de passe est créé/modifié ou qu'une connexion externe est ajoutée/supprimée.

Source: http://www.jamessturtevant.com/posts/ASPNET-Identity-Cookie-Authentication-Timeouts/

Hope it helps.

+0

Merci pour votre réponse. Toutefois, il est défini sur 30 minutes et l'utilisateur actuel est déconnecté toutes les 10-20 minutes, tandis que SlidingExpiration est défini sur true. Comment se fait-il que les utilisateurs se déconnectent même si SlidingExpiration est activé? La fonction regenerateIdentity ne générerait-elle pas une nouvelle identité valide? Je ne peux pas penser à autre chose. – Robin