2017-01-10 4 views
4

Aus irgendeinem Grund werden Benutzer fast alle 10/20 Minuten zurück zu login.microsoftonline.com weitergeleitet. Dies ist ziemlich ärgerlich, da der folgende Code verwendet wird, um Benutzer für ein CMS anzumelden.Benutzer werden alle 10 bis 20 Minuten abgemeldet (Anspruchsauthentifizierung)

Kann mir jemand sagen, was ist falsch mit dem folgenden Code und warum unsere Benutzer abgemeldet/umgeleitet zurück zu login.microsoftonline.com? Die Sitzungslebensdauer ist auf 60 Minuten festgelegt. Es muss also etwas mit der Autorisierung selbst sein.

Sollten wir WsFederationAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType oder DefaultAuthenticationTypes.ApplicationCookie?

Wir möchten, dass Benutzer bei der Verwendung einer Form (/ Konto/inloggen) oder über eine Schaltfläche namens ‚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); 
} 

Wann und warum (die ein externes Login ist) unterzeichnen, damit sollten wir verwenden Dies?

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

Wie Sie vielleicht bemerkt haben, bin ich ziemlich neu zu allem. Ich habe den Stack-Überlauf durchsucht und viele Beispiele googelt, aber es gibt keine klare Antwort/Anleitung, die verschiedene Autorisierungstypen, ihre Eigenschaften und ihre Verwendung erklärt.

Antwort

0

Ihr validateInterval: TimeSpan.FromMinutes (30) ist auf 30 Minuten eingestellt.

validateInterval ist nicht das gleiche wie auslaufende Cookies zu einem bestimmten Zeitpunkt. Zum Beispiel meldet sich ein Benutzer an Ort A an, geht dann zu Ort B und meldet sich an und ändert das Passwort. Dann kommen sie nach 30 Minuten zurück zu Standort A. Sie werden abgemeldet.

Der SecurityStampValidator wird immer dann erstellt, wenn ein Kennwort erstellt/geändert oder eine externe -Anmeldung hinzugefügt/entfernt wird.

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

Hoffe, es hilft.

+0

Vielen Dank für Ihre Antwort. Es ist jedoch auf 30 Minuten eingestellt und der aktuelle Benutzer wird alle 10-20 Minuten abgemeldet, während SlidingExpiration auf true gesetzt ist. Wie kommt es, dass die Benutzer abgemeldet werden, obwohl SlidingExpiration aktiviert ist? Würde die regenerateIdentity-Funktion keine neue gültige Identität generieren? Ich kann an nichts anderes denken. – Robin

Verwandte Themen