2011-03-11 3 views
6

ASP.NET 로그인 컨트롤을 사용하고 있습니다. Web.config에서 전역 적으로 대신 각 사용자에 대해 개별적으로 폼 인증에 대한 시간 제한을 설정할 수 있기를 원합니다. 내가 이것을 이해하는 유일한 방법은 AuthenticationTicket의 타임 아웃을 수동으로 설정하는 것입니다. 로그인 컨트롤을 사용할 때이 작업을 수행 할 수 있습니까? Login Control은이 모든 것을 추상화 한 것 같습니다. 로그인 컨트롤을 계속 사용하는 방법이 있지만 각 사용자에 대해 FormsAuthentication 시간 제한을 개별적으로 설정할 수도 있습니다.ASP.NET 로그인 컨트롤을 사용할 때 인증 티켓을 수동으로 설정할 수 있습니까?

감사합니다, 코리

답변

7

MSDN says을 사용하여 수동으로 티켓을 만들 수 있습니다

LoggedIn 이벤트가 인증 공급자를 확인 후 발생 사용자의 자격 증명과 인증 쿠키가 에 대기하고 다음에 응답으로 브라우저에 보냅니다. LoggedIn 이벤트를 사용하여 사용자가 인증 된 후 사용자 별 데이터에 액세스하는 등 추가 처리를 제공합니다.

따라서이 이벤트는 쿠키를 대체 할 적절한 장소 인 것으로 보입니다. 첫째, 쿠키 필요성을 검색하고 암호를 해독 할 수 있습니다 :

HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName]; 
FormsAuthenticationTicket oldAuthTicket = 
    FormsAuthentication.Decrypt(authCookie.Value); 

바로이 후, 바로 추출을 기반으로 새로운 인증 티켓을 생성해야합니다

여기
FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
    oldAuthTicket.Version, 
    oldAuthTicket.Name, 
    DateTime.Now, 
    DateTime.Now.Add(timeoutForUser), 
    oldAuthTicket.IsPersistent, 
    oldAuthTicket.UserData, 
    FormsAuthentication.FormsCookiePath 
); 

timeoutForUser가를 보유하고 TimeSpan 값 사용자에 대한 세션 시간 초과.

그리고는 마지막으로 응답 기존의 쿠키는 새 것으로 교체해야합니다

string encryptedTicket = FormsAuthentication.Encrypt(authTicket); 
authCookie = 
    new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
HttpContext.Current.Response.Cookies.Set(authCookie); 

이 트릭을 할해야합니다.

+0

감사합니다. 그것은 완벽하게 작동했습니다. 너 다 남자 야! –

1

로그인 컨트롤을 사용하면 인증을 직접 처리하는 데 사용할 수있는 LoggingInLoggedIn 이벤트가 있습니다.

당신은 e.Cancel = True을 설정하여 LoggingIn 이벤트에서 로그인 프로세스를 취소하고 새로운 new FormsAuthenticationTicket(...)

관련 문제