inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티

토큰 기반 인증 필터 : RememberMeAuthenticationFilter

RemeberMeAuthenticationFilter와 SessionManagementFilter의 관계에 대한 질문입니다.

해결된 질문

416

Henu

작성한 질문수 66

0

안녕하세요.

Spring Security RememberMeAuthenticationFilter 강의를 들으며 예제 코드를 따라하다가 궁금한 사항이 생겨 글을 남깁니다.

로그인 페이지를 통해 Remember Me 기능을 사용할 때

처음 로그인 후 JSESSIONID와 remeber-me 쿠기가 발급된 것을 확인하고 JSESSIONID를 소멸시킨 뒤 "/dashboard(인증된 사용자만 접근 가능)" URL을 요청하면

remember-me 쿠키가 있으므로RememberMeAuthenticationFilter을 통해 새로운 토큰(RememberMeAuthenticationToken)을 발급 받고 정상적으로 접근이 가능할 것 같았지만 그렇지 않았습니다.

=> 로그인 후 "/dashboard" 접근 --> JSESSIONID 제거 --> 새로고침 시 인가 실패 ERROR 페이지 전환 --> 다시 새로고침시 "/dashboard" 접근

이유를 살펴보니 아래 첨부된 이미지와 같이 SessionManagementFilter에서 제공하는 동시성 제어 기능(maxSessionsPreventsLogin(true))을 사용하면 위와 같은 문제가 발생하는 것 같아 보였습니다.

[이미지에서는 maxSessionsPreventsLogin(false)로 나와 있지만 테스트 중에는 "true" 인자를 넘겨줬습니다.]

동시성 제어란 세션 수를 설정하거나, 기존 세션을 만료하지 않고, 새로운 세션에 대해 접근하지 못하도록 설정하는 기능으로 알고 있는데요. 이 기능이 Remember Me 기능과 어떤 연관이 있는지 궁금합니다.

또한 Remember Me 기능과 별개의 문제로 SessionManagementFilter에서 maxSessionsPreventsLogin(true)를 설정하고

"로그인 -> 로그아웃 -> 로그인 재시도"시 인증이 실패됩니다.

추측을 해보자면 Remember Me 기능을 사용해서 JSESSIONID를 한번 제거하고,  remember-me 쿠키를 통해 새로운 SESSION를 생성하는 것과

로그아웃 후 다시 로그인하여 새로운 SESSION을 생성하는 것이 SessionManagementFilter의 "동시성 제어" 규칙에 어긋나기 때문에 인증이 실패한다라고 생각하면 될까요?

[GitHub code link]

https://github.com/wdEffort/std-spring-security/blob/master/src/main/java/me/henu/stdspringsecurity/config/SecurityConfig.java

java spring

답변 2

1

Henu

답변 감사드립니다. 

그렇다면 이러한 경우를 해결하기 위해서는 SessionManagementFilter의 "동시성 제어" 기능을 사용하지 않고 Remeber Me를 구현하는 방법이 있겠네요.  

하지만 동시성 제어를 사용하지 않으므로 발생할 수 있는 이슈들에 대해 고민을 하며 개발을 해야되겠네요.

1

백기선

설정만 보고 상황을 보면 그런 동작이 자연스러워 보이네요.

브라우저에서 기존 세션 id를 임의로 삭제하시면, 서버에선 최대 세션 개수를 1개로 정해놨고 (아직 그 세션이 서버 입장에선 유효한 상태겠죠.), 이후 넘치는 세션은 막도록 설정을 하셨으니, remember-me를 통해 세션을 새로 만들려고 할 때 에러가 나겠네요. 자세한건 필터들에 디버거 걸어놓고 통해 살펴보시면 좋을거 같습니다.

커스텀 로그인 페이지를 등록할 경우 LogoutFilter의 등록 여부 질문

0

384

1

anonymousClass를 사용하는 이유

0

387

1

ExcpetionTranslationFilter가 FilterSecurityInterceptor에서 발생하는 예외만 처리하는 이유

0

242

1

Principal 인터페이스와 User 클래스의 관계

0

756

1

passwordEncoder 질문드립니다.

0

320

1

WebSecurityConfigurerAdapter is deprecated 가 불편하신 분들을 위해

6

864

1

왜 스프링은 userid가 아니고 username을 사용했을까요?

0

1022

1

무상태성

0

347

2

로그인 후 로그인 페이지 접속

0

282

1

AuthenticationException은 어떤 경우에 발생하는지

0

557

1

AccountService에 비밀번호

1

225

1

커스텀 어노테이션 의 `커스텀 value` 설정방법에 관한 질문입니다.

0

356

1

passwordEncoder 빈 생성 시 차이

0

254

1

Bean 등록 관련 질문입니다.

0

248

1

시큐리티 전략관련

0

355

3

브라우저 기반 요청이 클라이언트의 요청을 처리 -> 의 의미?

0

228

1

AccountControllerTest 실행오류

0

1066

1

알려주신대로 설정을 해도 다시 302요청을 보냅니다....

0

342

1

voter에 대해 질문이 있습니다.

0

226

1

제가 맞게 이해한것인지 궁금합니다.

1

234

1

Spring security test 수행시 @AuthenticationPrincipal 가 null 로 세팅됨

0

550

1

Spring security Multi 인증 문의드려요

0

290

1

ProviderManager 문의

0

269

1

UserDetailsService 가 DaoAuthenticationProvider 에 어떻게 주입 되는지 알 수 있을 까요?

0

328

1