2017-08-25 7 views
2

Ich habe eine neue ASP.NET MVC-Website mit ASP.NET Identity erstellt. Ich verwende die von Visual Studio 2017 generierte Standardlogik und wähle Individuelle Benutzerkonten.Login Timeout erhöhen

Alles funktioniert gut, außer dass es mich innerhalb von 10 - 20 Minuten Inaktivität abmeldet und ich würde gerne länger eingeloggt bleiben.

Nach dem googlen um, fand ich Informationen über die Einstellung CookieAuthenticationOptions.ExpireTimeSpan. Mit dem Debugger kann ich jedoch sehen, dass dieser Wert standardmäßig auf 14 Tage eingestellt ist.

Startup.Auth.cs:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    }, 
    //SlidingExpiration = true,    // Default: true 
    //ExpireTimeSpan = TimeSpan.FromHours(1) // Default: 14 days 
}); 

Web.Config:

<system.web> 
    <authentication mode="None" /> 
    <compilation debug="true" targetFramework="4.6" /> 
    <httpRuntime targetFramework="4.5.2" executionTimeout="240" maxRequestLength="20480" /> 
    <httpModules> 
    <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /> 
    </httpModules> 
    <customErrors mode="Off"></customErrors> 
</system.web> 
<system.webServer> 
    <modules> 
    <remove name="FormsAuthentication" /> 
    <remove name="ApplicationInsightsWebTracking" /> 
    <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" /> 
    </modules> 
    <validation validateIntegratedModeConfiguration="false" /> 
<security> 
    <requestFiltering> 
     <requestLimits maxAllowedContentLength="20971520" /> 
    </requestFiltering> 
    </security> 
</system.webServer> 

Also, Wer weiß, wie die Höhe der Zeit zu erhöhen, bevor ich wegen protokolliert werden aus zur Inaktivität?

Antwort

0

Dies wird auf Datei web.config konfiguriert als

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="~/SignIn/LoginPage" timeout="2880" defaultUrl="~/Pages/ServicesPage" /> 
    </authentication> 

die Timeout-Zeit auf dem Grundstück Timeout in Millisekunden definiert folgt

+2

Danke, aber Forms Authentication ist der alte Weg und ASP.NET Identity ist der neue Weg. Sicherlich kann die einzige Antwort nicht sein, dass ich Dinge auf die alte Art tun muss. –

1

Haben Sie mit der isPersistent Flagge Einloggen?

Sie müssen isPersistent = true übergeben, um sich automatisch erneut mit den Cookie-Daten einzuloggen.

Ihre Identität wird in SecurityStampValidator.OnValidateIdentity aktualisiert, wenn Sie hier abgelehnt werden, dann wird es Sie abmelden.

Ich würde empfehlen, Ihre eigenen SecurityStampValidator und UserManager zu implementieren, dann können Sie debuggen, warum es Sie in OnValidateIdentity zurückweist.

Überprüfen Sie auch Ihr Caching, vielleicht haben Sie nur ein Caching-Problem und es sieht so aus, als hätten Sie sich ausgeloggt, weil Sie "alten" Inhalt zeigen.

+0

Ich glaube, dieses Flag entspricht dem Kontrollkästchen * Remember me *. Und ja, ich habe versucht, das zu überprüfen. –

+0

Was passiert, wenn Sie "validateInterval:" auf einige Sekunden setzen? Abmelden Sie sich nach dieser Zeit? –

+0

Es tut es nicht. Lassen Sie mich jedoch sicherstellen, dass ich Folgendes verstehe: Wenn Sie eine MVC-Anwendung mit Visual Studio 2017 mit der Einstellung * Individuelle Benutzerkonten * erstellen, können Sie den Computer beispielsweise für eine Stunde oder länger inaktiv lassen und beim Aktualisieren der Seite oder klicken Sie auf etwas, das Sie noch angemeldet sind? –