2015-02-06 1 views
12

Owin 쿠키 인증을 사용하는 ASP.NET MVC 5 앱이 있습니다. 우리는 우리의 응용 프로그램의 관리자가 조직 내에서 세션 시간 제한을 사용자 정의 할 수있는 기능 요청이ASP.NET Owin 보안 쿠키의 ExpireTimeSpan을 사용자 단위로 설정할 수 있습니까?

public partial class Startup 
{ 
    public void ConfigureAuth(IAppBuilder app) 
    { 
     var timeoutInMinutes = int.Parse(ConfigurationManager.AppSettings["cookie.timeout-minutes"]); 

     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      AuthenticationMode = AuthenticationMode.Active, 
      LoginPath = new PathString("/"), 
      ExpireTimeSpan = TimeSpan.FromMinutes(timeoutInMinutes), 
      SlidingExpiration = true, 
      LogoutPath = new PathString("/Sessions/Logout") 
     }); 
    } 
} 

다음과 같이 현재, 우리는 쿠키 인증을 설정합니다. 그러나 위의 구성 코드는 MVC 응용 프로그램 수준에서 실행되며 우리의 응용 프로그램은 다중 사용자입니다. 누구든지 인증 중에 또는 Owin 파이프 라인 이벤트를 어딘가에 무시함으로써 사용자별로 ExpireTimeSpan을 사용자별로 설정할 수있는 방법을 알고 있습니까?

미리 감사드립니다.

답변

11

인증 옵션에는 Provider이라는 속성이 있습니다. 이 값을 기본 공급자로 설정하고 OnResponseSignIn과 같은 메서드 재정의 중 하나를 사용하여 로그인 설정을 수정하거나 직접 ICookieAuthenticationProvider을 구현하고 동일한 작업을 수행 할 수 있습니다.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    Provider = new CookieAuthenticationProvider 
    { 
     OnResponseSignIn = signInContext => 
     { 
      var expireTimeSpan = TimeSpan.FromMinutes(15); 

      if (signInContext.Properties.Dictionary["organization"] == "org-1") 
      { 
       expireTimeSpan = TimeSpan.FromMinutes(45); 
      } 

      signInContext.Properties.ExpiresUtc = DateTime.UtcNow.Add(expireTimeSpan); 
     } 
    } 
}); 

수신되는 클레임을 확인하여 세션 처리 방법을 확인하거나 사용자 지정 데이터를 로그인 호출에 추가 할 수 있습니다. 당신이 정말로 원한다면

context.Authentication.SignIn(new AuthenticationProperties 
{ 
    Dictionary = 
    { 
     { "organization", "org-3" } 
    } 
}, new ClaimsIdentity()); 

당신은 그것이 쉽게 관리 할 수 ​​그래서 인증 공급자에 그 논리를 두는 것이 가장 될 수 있지만, 호출 부호에 ExpiresUtc을 설정할 수 있습니다.

+0

감사합니다. –

+0

ExpiresUtc가 나에게 적합하지 않은 것처럼 보였지만, 유망 해 보입니다. –

+0

나는 이것이 어떻게 작동하는지 조금 당황 스럽다. 특히,이 접근법은 만료 만료를 제공했으며, 이것이 가능한 방법을 알지 못합니다. OnResponseSignIn은 로그인 할 때 한 번만 호출되며 ExpiresUtc는 특정 시계 시간으로 설정됩니다. 따라서 12시 01 분에 로그인 한 경우 ExpiresUtc는 12시 16 분으로 설정됩니다.하지만 12시 5 분에 요청을하면 OnResponseSignIn의 중단 점은 다시는 치지 않지만 내 로그인은 12시 16 분에 만료되지 않습니다. 12시 20 분까지 유효합니다. 내 쿠키는 후속 요청에도 불구하고 12시 16 분을 말합니다. 어떻게 가능합니까? – Grank

관련 문제