読者です 読者をやめる 読者になる 読者になる

ASP.NET IdentityでCookieの有効期間を設定する

こんにちは。beaglesoftの真鍋です。

ASP.NET Identity2でCookieの有効期間を設定する方法ですが、ログイン時にRememberMeチェックボックスのチェックを付けることでログアウトを行わない場合に認証状態を一定期間保持できます。

特に設定を行わない場合には、14日間が有効期間として設定されていますがこの設定を変更することもできます。

具体的には、Startup.AuthクラスのCookieAuthenticationOptionsExpireTimeSpanを指定します。

public partial class Startup
{
    // 認証設定の詳細については、http://go.microsoft.com/fwlink/?LinkId=301864 を参照してください
    public void ConfigureAuth(IAppBuilder app)
    {
        ...
        // アプリケーションが Cookie を使用して、サインインしたユーザーの情報を格納できるようにします
        // また、サードパーティのログイン プロバイダーを使用してログインするユーザーに関する情報を、Cookie を使用して一時的に保存できるようにします
        // サインイン Cookie の設定
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                // ユーザーがログインするときにセキュリティ スタンプを検証するように設定します。
                // これはセキュリティ機能の 1 つであり、パスワードを変更するときやアカウントに外部ログインを追加するときに使用されます。
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                 validateInterval: TimeSpan.FromMinutes(30),
                 regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            },
                // ↓この設定を追加する
            SlidingExpiration = false,
                // 今回は30日間を指定
            ExpireTimeSpan = TimeSpan.FromMinutes(43200)
        });            
        ...
    }
}

SlidingExpirationFormsAuthenticationConfiguration.SlidingExpiration プロパティ (System.Web.Configuration).aspx)にあるように、Cookieの有効期間が半分より過ぎたときにユーザーがログインをしていると、有効期間が更新される設定です。

'ExpireTimeSpan 'はCookieの有効期間で、分単位で設定します。

上記の場合には、30日間の設定を行いました。(2016/03/05 14:20ごろに作成)

aspnet_cookie.png (26.1 kB)

参考にしたサイト

ASP.NET-Identity-Cookie-Authentication-Timeouts · James Sturtevant

プログラミングMicrosoft ASP.NET MVC 第3版ASP.NET MVC 5 対応版 (マイクロソフト公式解説書)