2017-07-03 7 views
0

私はasp.netコアプロジェクトを持っています。アプリケーションには2つの役割があります。サイト内で動作することができるアクセスが制限されたユーザーの役割、およびサイトと管理パネルで動作できる完全なアクセス権を持つ管理者の役割です。 いくつかのセキュリティ上の理由から、私は管理者のアイドルタイムアウトを短く(約30分)、ユーザロールを1日にタイムアウトさせたいと思っています。私はこのコードasp.netコアプロジェクト内の特定のユーザーの異なるアイドルタイムアウトの設定方法

services.AddSession(options => 
    { 
     options.IdleTimeout = TimeSpan.FromDays(1); 
     options.CookieName = "Session"; 
    }); 

方法adminロールのIdleTimeoutを設定できるのを設定し、デフォルトとしてユーザロールの ?

答えて

0

単純に、あなたはできません。セッションタイムアウトはグローバルです。ただし、セッションを手動でタイムアウトさせるレイヤーを実装することもできます。たとえば、セッションが開始されると、現在の日付と時刻のセッション変数varを追加できます。次に、このセッションvarをチェックし、datetimeと特定のユーザーロールのカスタムタイムアウトを比較するグローバルアクションフィルタを追加できます。カスタムタイムアウトを超えた場合、セッションを手動で破棄できます(Session.Abandon())。これを有効にするには、グローバルセッションのタイムアウトが可能な限り最長のタイムアウト(おそらく管理者用)でなければなりません。その後、カスタムタイムアウトは、より短いタイムアウト期間を持つ任意のロールになります。

0

異なるセッションのアイドル時間を設定するには、SessionMiddlewareを変更する必要があります。

説明:

AddSessionがDIでシングルトンとしてSessionOptionsオブジェクトを登録します。このオブジェクトはSessionMiddlewareに注入されます。残念なことに、それはコンストラクタに注入されます。 knowでは、アプリの起動時にミドルウェアが構築されます。リクエストごとの依存性注入は、Invokeメソッドのみに可能であり、SessionMiddlewareは、を受け入れるInvokeメソッドを持たない。

だから、計画は次のとおりです。

  1. フォークSessionMiddlewareInvoke(HttpContext, SessionOptions)メソッドを実装します。
  2. AddSessionの後にreplaceSessionOptionsが登録されます。たとえば、

services.Replace(new ServiceDescriptor(typeof(SessionOptions), 
    provider => 
    { 
     //you could resolve another dependencies here and determine user's role. 
     var service = provider.GetService<FooService>(); 

     return new SessionOptions(); 
    }, 
    ServiceLifetime.Scoped)); 
関連する問題