2016-05-09 81 views
3

私のアプリケーションでは、一定期間使用しないとユーザーをログオフしたいと考えています。ユーザーはGoogleアカウントを使用してログインします。ASP.NET MVC - 自動ログオフ

Web.configファイルでは、<sessionState mode="InProc" timeout="10" /><system.web>に設定しましたが、10分後にユーザーはログオフされませんでした。

自動ログオフしたいもう一つのことは、ログオフを完了する前にコードを実行することです。このコードは、単にデータベーステーブルのフィールドを更新します。ユーザーがウェブサイトから離れた場合に自動ログオフを有効にしたいのでJavaScriptを使用したくありません。 Startup.Auth.cs内部

EDIT

コード@Igor

using System; 
using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.Owin; 
using Microsoft.Owin; 
using Microsoft.Owin.Security.Cookies; 
using Microsoft.Owin.Security.Google; 
using Owin; 
using StudentLive.Models; 

namespace StudentLive 
{ 
    public partial class Startup 
    { 
     // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 
     public void ConfigureAuth(IAppBuilder app) 
     { 
      // Configure the db context, user manager and signin manager to use a single instance per request 
      app.CreatePerOwinContext(ApplicationDbContext.Create); 
      app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
      app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.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/Login"), 
       Provider = new CookieAuthenticationProvider 
       { 
        // Enables the application to validate the security stamp when the user logs in. 
        // This is a security feature which is used when you change a password or add an external login to your account. 
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
         validateInterval: TimeSpan.FromMinutes(30), 
         regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
       } 
      });    
      app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

      // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. 
      app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 

      // Enables the application to remember the second login verification factor such as phone or email. 
      // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. 
      // This is similar to the RememberMe option when you log in. 
      app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 

      // Uncomment the following lines to enable logging in with third party login providers 
      //app.UseMicrosoftAccountAuthentication(
      // clientId: "", 
      // clientSecret: ""); 

      //app.UseTwitterAuthentication(
      // consumerKey: "", 
      // consumerSecret: ""); 

      //app.UseFacebookAuthentication(
      // appId: "", 
      // appSecret: ""); 

      app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() 
      { 
       ClientId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
       ClientSecret = "XXXXXXXXXXXXXXXXXXXX" 
      }); 
     } 
    } 
} 
+2

セッション状態が認証状態ではありません。これらは2つの全く異なるものです。セッションはセッションの状態を持続させる方法であり、セッションはクライアントがサイトと対話することです。認証とは、クライアントが誰に知られているかをシステムに知らせることです。したがって、web.configのこの設定の変更は、クライアントの認証済み状態に影響を与えません。 – Igor

+0

追加のヘルプが必要な場合は、ユーザーの認証方法を指定する必要があります。既存のライブラリまたは組み込みプロバイダを使用していると仮定しています。そうでない場合は、これまでに行ったコードを提供する必要があります。 – Igor

+0

@IgorユーザーはGoogleアカウントを使用して認証されます。 Visual Studio 2013は、 'Startup.Auth.cs'ファイルで外部プロバイダのログインを処理するためのコードを提供しています。' AccountController'には既に外部ログインを処理するコードがあります。実際の設定は必要ありませんこれは私の 'ClientId'と' ClientSecret'を提供することを別にしています。 – RoyalSwish

答えて

5

によって要求されるようにあなたがCookieAuthenticationOptionsインスタンスを変更して、有効期限のための追加の詳細を提供する必要があります。 SlidingExpirationが新しい有効期限でそれを半以上ある要求を処理し、いつでも新しいクッキーを再発行するミドルウェアに指示するためにtrueに設定されている - ドキュメント

  • SlidingExpirationから

    有効期限ウィンドウを介して
  • ExpireTimeSpan - クッキーが作成された時点から有効な時間を制御します。期限切れ情報は、保護されたクッキーチケットにあります。そのため、有効期限が切れたCookieは、ブラウザがパージした後にサーバーに渡されても無視されます。

コード:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    // add these lines 
    SlidingExpiration = true, 
    ExpireTimeSpan = TimeSpan.FromMinutes(10), 
    // rest of your code 
} 
+0

これで外部認証Cookieの有効期限は切れますか?それとも、asp.net認証Cookieでのみ動作しますか? –

+0

@ErikFunkenbusch - クレーム情報を含むCookie(そのドメインが所有する)を理解しています。アプリケーションが認証コンテキストを持つように、認証されたIDを再構築する要求ごとにこのCookieが再検証されます。Cookie自体に標準の有効期限情報(有効期限/有効期限)が含まれているため、アプリで有効期限を設定できるはずです。 – Igor

関連する問題