2017-08-22 29 views
2

数日前、asp.netコア1.1からコア2.0にWebアプリケーションをアップグレードすることに決めました。 20分から30分を超えても認証が持続しないことを除いて、すべてが軽微な変更の後で正常に動作するようです。asp.net-core2.0ユーザーの自動ログオフ(20-30分後)

自分のwebappで同じ問題が発生し、「ASP.NET Core Webアプリケーション」 - > .NET Framework 4.6.1 + ASP.NET Core 2.0 + MVCが発生するため、Visual Studioからデフォルトの例を取ることができます+個々のユーザーアカウント

設定はデフォルトで、ユーザーが14日間ログインする必要があります。

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddDbContext<ApplicationDbContext>(options => 
     options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 

    services.AddIdentity<ApplicationUser, IdentityRole>() 
     .AddEntityFrameworkStores<ApplicationDbContext>() 
     .AddDefaultTokenProviders(); 
... 
    services.AddMvc(); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
... 
    app.UseAuthentication(); 
... 
} 

問題は、ユーザーが唯一の20〜30分間でログインしたままということです。ユーザーがログインすると(「Remember me」が選択されている)、ページをナビゲートしたり、ブラウザを再起動してもユーザーはログインしたままになります。したがって、認証Cookieが動作しているようです。しかし、20〜30分後にユーザーが自動的にログアウトされるか、またはクッキーの有効期限が切れると言わなければなりません(何が起こるか分かりません)。もう一度ログインすれば、もう一度ゲームが始まります。

私は、アプリケーションのCookieの有効期限を設定しようとしたが、これで問題が解決しない:

services.ConfigureApplicationCookie(options => { 
    options.ExpireTimeSpan = TimeSpan.FromDays(1); // Just shortens cookie expiration time, but still logs out users after 20-30 minutes. 
}); 

それは20〜30分かかりますので、それはデフォルトのセッションタイムアウトのようになります。

services.AddSession(options => 
{ 
    options.Cookie.Expiration = TimeSpan.FromDays(1); // This throws an error "Expiration cannot be set for the cookie defined by SessionOptions" 
    options.IdleTimeout = TimeSpan.FromDays(1); // This changes session sliding expiration time... 
}); 

同じ実装がASP.NET Core 1.1で正常に機能しました。

答えて

0

サーバーは、最後の要求後、限られた時間セッションを保持します。セッションタイムアウトを設定するか、デフォルト値の20分を使用できます。

デフォルト値を変更するには、ConfigureServicesメソッドを編集します。

public void ConfigureServices(IServiceCollection services) 
    { 
     .... 
     services.AddSession(options => { 
       options.IdleTimeout = TimeSpan.FromMinutes(30); 
       options.CookieName = ".MyApplication"; 
      }); 
    } 
+0

はい私はこれを理解していますが、それはコア1.1または1.0で早く動作しました。彼らはこの機能を削除しましたか? 数日後にウェブサイトで引き続き使用することができました。 – Shaltukaz

+0

残念ながら、いつ変更したのか、変更したのか分かりません。 –

+0

ありがとうございます。 idletimeoutを60分に設定しようとしました。しかし、20分後にログアウトする。 ここでセッションタイムアウトを変更することはできません。また、認証プロセスはセッションに依存しません。 – Shaltukaz

0

このトピックを参照すると、セッションを長生きするために役立ちます。

Keep Session Live

1

[OK]を、私はこれについて別のフォーラムをスパム:)そして、ここに私の発見されています。元https://github.com/aspnet/Identity/issues/1389

これはどのように機能するのか、私の理解に大きな差があるようです。私も少し嘘をついたことがわかりました。だから私のように愚かな人に仕上げること。

services.AddIdentity<ApplicationUser, IdentityRole>() 
    .AddEntityFrameworkStores<ApplicationDbContext>() 
    .AddDefaultTokenProviders(); 
services.Configure<SecurityStampValidatorOptions>(options => options.ValidationInterval = TimeSpan.FromSeconds(10)); 
services.AddAuthentication() 
    .Services.ConfigureApplicationCookie(options => 
    { 
     options.SlidingExpiration = true; 
     options.ExpireTimeSpan = TimeSpan.FromMinutes(30); 
    }); 

これは、このように動作します私の理解をよると:ユーザーがログインしている場合

  • チェック要求の比率に応じて、〜10秒ごとに発生します。サーバーは、サーバーへのすべての要求時にセキュリティ・スタンプをチェックします。options.ValidationInterval = TimeSpan.FromSeconds(10))

  • cookieは最低でも30分有効ですoptions.ExpireTimeSpan = TimeSpan.FromMinutes(30);ですが、ページを更新またはナビゲートするとoptions.SlidingExpiration = true;で拡張できます。

  • 重要!私のようにあまりにも "スマート"ではなく、成功したログインの直後に_userManager.UpdateSecurityStampAsync(user);を実行しないでください。これによりセキュリティスタンプが更新され、次の検証の検証が失敗するためです。

関連する問題