2013-06-19 6 views
2

ASP.Net MVC3 사이트에서 쿠키없는 인증 및 세션을 사용하도록 설정했습니다. 우리가 마주 치게 된 문제는 사용자를 로그 아웃하면 쿠키가없는 문자열에 저장된 이미 생성 된 쿠키/세션을 무효화하지 않는다는 것입니다. 시나리오는 다음과 같습니다 :ASP.Net 쿠키가없는 경우 : 인증 쿠키를 삭제하는 방법

사용자가 쿠키없는 인증을 사용하여 사이트에 로그인하고 등록하고 로그인합니다. 사용자는 이제 자신의 URL에 쿠키없는 티켓을 가지고 있습니다. 사용자가 바탕 화면 바로 가기를 만들거나 복사하여 붙여 넣으면 URL이 복사됩니다.

사용자가 사이트에서 로그 아웃하고 FormAuthentication.SignOut()이 호출되어 티켓이 무효화되고 로그온 페이지로 리디렉션됩니다.

사용자는 이제 해당 URL을 복사하여 다른 브라우저로 붙여 넣거나 다른 컴퓨터로 이동할 수 있으며 사이트는 이미 로그 아웃 했어도 해당 인증 티켓을 수락 할 수 있습니다. 심각한 보안 위험을 초래합니다.

쿠키가 없는지 여부에 관계없이 이전 쿠키를 모두 비활성화 할 수 있습니까? 현재 우리의 프로세스는 쿠키 기반 세션/로그인을 위해 작동합니다. 쿠키가 필요없는 솔루션 만 있으면됩니다.

우리가 지금까지 발견 한 유일한 해결책은 db의 모든 쿠키를 추적하고 데이터베이스의 쿠키를 무효화하고 db를 검사하여 현재 쿠키가 여전히 유효한지 확인하는 것입니다. 이는 성능에 큰 영향을 미칠 수 있으므로 앞으로 나아갈 때까지 이것이 유일한/최선의 해결책인지 확인하고자합니다. SignOut 후

감사

답변

2

을 삭제합니다. cariwies 내의이 티켓은 (적어도 지속성이 없다면) 만료되며, 그 시간이 지나면 url은 유효하지 않게됩니다. 그래서 단순히 시간 간격을 줄이는 것이 좋습니다. 명시 적 로그 아웃이 "필수"인 경우 웹 팜에 있고 어떤 종류의 스케일 아웃 솔루션이없는 경우에만 db를 사용해야합니다. 단일 상자가있는 경우 HttpCache를 사용하여 더러운 작업을 수행 할 수 있습니다. 또한 나는 전체 쿠키가 아닌 UserID 만 사용합니다 (즉, 로그인시 활성 사용자 ID 범위에 UserID를 추가하고 활성 사용자 ID 범위 내에있는 경우 Global.asax에 PostAuthorize 확인, 사용자가 활성 사용자 ID 내에 있는지 확인, 로그 아웃하면 그를 제거합니다.

+0

대단히 감사합니다. 답장이 늦어서 미안해. 그것은 조금 바빴다. 나는 HttpCache를위한 당신의 솔루션을 좋아한다. 현재 버전에서 사용합니다. 앞으로 웹 팜으로 이동하게 될 것이므로 DB로 이동하거나 팜에 분산 된 캐시를 사용해야합니다. – Gustyn

0

사용 Session.Abandon()는/F-긴 텍스트가/당신의 FormAuthentication 티켓을 저장되어있는 URL에 기본적으로 세션

+0

나는 이미 그 해결책을 시도했다. 유감스럽게도 URL을 인코딩 한 쿠키는 세션을 종료해도 나중에 들어온 경우 계속 유지됩니다. 답변을 주셔서 감사합니다. – Gustyn

+0

세션 상태는 Forms 인증과는 아무런 관련이 없습니다. –