inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

기억하기 인증 필터(RememberMeAuthenticationFilter) 강의를 듣다가 사소한 궁금증이 생겨 질문드립니다.

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

안녕하세요. 기억하기 인증 필터(RememberMeAuthenticationFilter) 강의를 듣다가 사소한 궁금증이 생겨 질문드립니다. 리멤버미 쿠키를 사용시 쿠키를 바탕으로 인증 정보를 가져오는 로직에서, JSESSIONID 쿠키가 만료되었을 때와 서버가 재시작되었을 때 password가 왜 다르게 불러와지는지 알고 싶습니다. 서버 재시작 시 리멤버미 쿠키로 인증 정보가 복구되지 않는 이유를 조사하던 중에 생긴 의문인데요. 제 생각으로는 쿠키에 인증 정보를 담고 있어서, 서버가 재시작되더라도 쿠키가 만료되지 않는 한 인증 정보를 복구할 수 있을 것 같았거든요. 제가 코드를 따라가서 확인한 부분은.. 리멤버미 쿠키를 생성할때 맨 마지막 필드로 makeTokenSignature 메서드의 값이 들어가는데 이 값은 String data = username + ":" + tokenExpiryTime + ":" + password + ":" + getKey(); 정보를 조합하여 만들어지는데, 여기서 getKey() 는 RememberMeConfigurer 에서 init할때 rememberMeServices 를 커스텀하게 주입하지 않으면 RememberMeConfigurer 에서 UUID.randomUUID().toString() 로 가져오기 때문에 서버가 재시작할때마다 랜덤한 값을 가지고 오더라구요. 그래서 서버가 재시작되더라도 고정된 key값을 사용하기 위해 TokenBasedRememberMeService 를 생성하여 아래와 같이 설정하였습니다. 이후에 getKey() 할때도 key로 test를 가지고 오는것을 확인하였구요. 그러면 이제 key가 고정이기 때문에 서버가 재시작되어도 리멤버미 쿠키를 바탕으로 인증을 진행하여 로그인 없이 세션이 유지될줄 알았는데?!, processAutoLoginCookie 메서드에서 아래 코드에서 exception이 발생합니다.. if (!equals(expectedTokenSignature, actualTokenSignature)) { throw new InvalidCookieException("Cookie contained signature '" + actualTokenSignature + "' but expected '" + expectedTokenSignature + "'"); } 확인해보니 유저 정보를 가져올때 password를 다르게 가져오고있더라구요. TokenSignature는 password와 여러 정보를 조합하여 만드는데, password값이 달라지니 예상값과 실제값이 차이가 나서 exception이 떨어지구요.. UserDetails userDetails = getUserDetailsService().loadUserByUsername(cookieTokens[0]); *로그인 > JSESSIONID 삭제 이후 로그인시 *서버 재시작 이후 로그인시 질문이 좀 장황했는데, 왜 password를 다르게 가져오는지 궁금합니다. 코드를 쫓아가다가 길을 잃어서 도움을 받을수 있을까 하여 질문을 남겨요.. 감사합니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
댓글 1 좋아요 0 조회수 126

세션클러스터링 적용후 중복로그인 체크

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

안녕하세요. 스프링 시큐리티 완전 정복 6.x 버전 잘 들었습니다. 궁금한 점 이 있는데요. 세션 클러스터링을 통해서 redis를 적용하면 세션이 tomcat -> rediss로 변경되는 부분 확인하였고, 잘 동작되는 것도 확인하였습니다. 궁금한 점은 단일 서버일 때 중복 로그인 설정을 하면 session 체크를 ConcurrentSessionFilter에서 하는 것으로 알고 있는데, 세션 클러스터링을 적용하면 동시 세션을 어떻게 체크하는지 궁금하고, 이것을 제어하기 위해 설정이 추가로 필요한지 궁금합니다. 단일 서버일 경우 sessionManagement를 통해서 maximumSessions(1) 인 것을 체크를 하게 되는데, 세션 클러스터링을 적용할 경우 이 값을 어떻게 공유하면서 처리하는지 궁금합니다. 감사합니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
콩코드여객기 댓글 2 좋아요 0 조회수 395

인증 컨텍스트 - SecurityContext / SecuriryContextHolder - 2

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

강의 13분 50초를 보면 this.securityContextHolderStrateget.setContext(context); this.securityContextRepository.saveContext(context, request, response); 두 메서드가 존재합니다. 전자는 ThreadLocal에 인증객체를 저장한다라고 하셨고, 후자는 세션에 저장한다라고 설명해주셨는데 개인적으로 잘 이해가 안갑니다. 차이가 무엇인지...

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
우기바나 댓글 2 좋아요 0 조회수 137

SecurityContextRepository부분 질문 있습니다

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

강의자료 95 page에는 커스텀 한 인증 필터를 구현할 경우 securityContext.saveContext() 를 명시적으로 작성해야 된다고 적혀있는데 해당 부분은 OncePerrequestFilter 를 통해 완전 처음부터 작성한 커스텀 필터일 경우이고 이번 강의에서는 AbstractAuthenticationProcessingFilter 를 상속받고 그 내부에서 successfulAuthentication 을 통해서 saveContext() 가 작동한다고 이해했는데 맞을까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
kyb1208tg 댓글 2 좋아요 0 조회수 187

커스텀 AuthenticationProvider 구현 질문

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

저번시간에 커스텀 UserDetailsService를 만들고 이번에 커스텀 AuthenticationProvider를 만드는데 커스텀 AuthenticationProvider는 왜 만드는건가요? 커스텀 UserDetailsService는 저희가 이번 프로젝트에서 유저 객체를 db와 연동하기 때문에 구현을 안하면 제대로 작동하지 않아서 반드시 만들어야 하는데, 커스텀 AuthenticationProvider는 만들지 않아도 저번시간마지막에 보면 로그인 인증이 제대로 되는데 왜 만드는건가요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
에욱 댓글 2 좋아요 0 조회수 242

AccountDto 생성 이유

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

지금 생성한 AccountDto는 Account 와 모든 필드가 동일한데 무슨 이유로 만든건가요? 보통 Dto는 Entity 객체와 응답하거나 받을때 필드가 달라서 그럴때를 위해 만드는걸로 아는데 지금 만든 두 객체는 필드가 동일한데 뭐하러 만드는지 모르겠습니다. FormUserDetailsService에서 마지막에 return하기전에 account 객체를 AccountDto 타입으로 바꾸면서 하신 말씀이 클라이언트에서 엔티티 객체를 그대로 주지 않기 위해서 라고 하셨는데 지금 FormUserDetailsService는 인증 필터에서 받고 사용하는거라 클라이언트에게 주는게 아니지 않나요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
에욱 댓글 1 좋아요 0 조회수 167

csrf 토큰 자동추가 질문 있습니다

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

thymleaf 의 경우에는 form tag가 붙어있고, spring security에 csrf설정이 켜져 있으면 해당 form 에 csrf input 이 hidden으로 추가되고 CookieCsrfTokenRepository를 사용할 경우에는 post요청이 아니여도 쿠키를 통해 csrf token을 전달해준다고 이해했는데 제대로 이해한걸까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
kyb1208tg 댓글 2 좋아요 2 조회수 296

CookieCsrfTokenRepository 방식 질문 있습니다

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

csrf는 결국 쿠키와 같이 브라우저가 자동으로 추가하는 이유로 발생하는 문제로 이해했습니다. CookieCsrfTokenRepository방식은 csrf 토큰을 쿠키로 전달하고 client 쪽에서 해당 쿠키값을 읽어서 헤더나, 매개변수로 전달하는걸로 이해했습니다. client에서 cookie를 읽기 위해서는 httponly 속성을 꺼야되는데 이러면 보안상으로 취약해진다고 알고 있는데 이러한 점에도 굳이 세션을 놔두고 해당 방식으로 하는 이점이 있을까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
kyb1208tg 댓글 2 좋아요 2 조회수 271

RememberMeService가 필요한 이유?

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

안녕하세요. 강의 잘 듣고 있습니다! 저의 질문은 RememberMe의 존재 이유를 잘 모르겠습니다. 로그인이 안풀리게 하려는건가요 ? 그러면 세션의 유지시간을 길게 잡을 수 있을 것 같은데, 복잡하게 JSESSIONID와 REMEMBER 조합으로 쓰는 이유가 와닿지가 않네요. 어떠한 이유로 이게 생긴것이고, 어떤 상황에서 유용하게 쓸 수 있을까요? 감사합니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
ehdgur4814 댓글 1 좋아요 0 조회수 191

csrf POST 요청 시에 토큰값 넣어도 안되는 경우 확인해보세요

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

_csrf 파라미터 이름과 값 사이에 공백이 있는지 확인해보세요 공백이 있을 경우 아래와 같이 공백을 지우고 다시 시도하시면 정상 작동됩니다 ### POST request with a header POST http://localhost:8080/csrf Content-Type: application/x-www-form-urlencoded _csrf=6LGfk2d_v1r5vsNT5VxTiI_8HIvuqSEMwVrVRCCQUXXhiSxyjNSppF5Jjz_Uiftmg3FnurzEMbONyhkhpD-wfROnYUTUuE5E

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
시나모롤 댓글 1 좋아요 0 조회수 336

제가 이해를 제대로 했는지 궁금해서 질문드립니다

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

클라이언트 응답후 SecurityContextHolder는 계속 clear된다고 이해했습니다. 그럼 결국 Session에는 SecurityContext 가 저장되서 유지되는거고, 인증이 필요할때 해당 Session에서 SecurityContext를 꺼내 해당 요청동안에 SecurityContextHolder에 저장해서 사용한다고 이해하면 될까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
kyb1208tg 댓글 2 좋아요 0 조회수 145

RoleHierarchyImpl 관련 deprecated 이슈로 인한 수정 코드 기록

해결됨

스프링 시큐리티 완전 정복 [6.x 개정판]

Spring security 6.3.3 버전에서 setHierarchy 와 생성자인 RoleHierarchyImpl () 가 deprecated 되어 공식문서 권장 방법으로 수정한 코드를 남깁니다. 전) 이전 방식 @Bean public RoleHierarchy roleHierarchy() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_DB\n" + "ROLE_DB > ROLE_USER\n" + "ROLE_USER > ROLE_ANONYMOUS"); return roleHierarchy; } 후) 정적 메소드 fromHierarchy 사용 @Bean public RoleHierarchy roleHierarchy() { return fromHierarchy("ROLE_ADMIN > ROLE_DB\n" + "ROLE_DB > ROLE_USER\n" + "ROLE_USER > ROLE_ANONYMOUS"); }

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
dcloyal1 댓글 0 좋아요 8 조회수 393

세션 질문입니다.

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

사용자가 웹에 접속하고 로그인도 안했는데 세션이 왜 생기는건가요? 지금까지 이전 강의에서는 로그인 인증에 성공하면 그때 서버에서 세션을 생성하고 저장한다고 배웠던거 같은데 그냥 접속만 해도 서버에서 클라이언트에 왜 세션을 주는건지 모르겠습니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
에욱 댓글 2 좋아요 0 조회수 243

provider가 선택되는 정확한 기준을 잘 모르겠습니다

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

두번째 방식이 CustomProvider에 의해 처리가 되는 것이 이해가 되지 않습니다. 첫번째 방식과 단지 CustomProvider를 추가한 것만 다르다고 생각하는데 이로 인해 해당 CustomProvider가 선택된것인가요? 아니면 Dao방식은 parent에 존제하기 때문에 현재 list에 존제하는 custom방식이 채택된거라고 이해하면 될까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
kyb1208tg 댓글 2 좋아요 0 조회수 168

강의 20분13초 내용 질문입니다.

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

requestMatchers("/login").permitAll()로 /login에 대한 요청은 인증이 필요없게 설정했는데, .formLogin()을 설정하고 나서 "/login" 요청이 formLogin 방식의 필터에 걸리는 건가요? formLogin() 설정을 해도 이미 위에서 equestMatchers("/login").permitAll() 로 /login 에 대한 요청은 인증이 필요없으므로 필터에 걸리지 않고 바로 컨트롤러 PostMapping("/login")으로 가야되는거 아닌가요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
댓글 2 좋아요 0 조회수 242

클라이언트마다 별도의 쓰레드 할당 질문입니다.

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

클라이언트마다 별도의 쓰레드가 할당되고 각 쓰레드별로 쓰레드로컬을 가지고있어 여기에 인증객체를 가진 SecurityContext가 저장된다고 설명해주셨습니다. 근데 제가 알기로 같은 사용자더라도 서버에 요청할때마다 다른 쓰레드가 할당되는걸로 아는데 아닌가요? 맞다면 같은 사용자이더라도 요청할때마다 별도의 쓰레드가 할당되므로, 이전 요청에서 로그인인증을 통해 저장했던 SecurityContext는 사용하지 못하는거 아닌가요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
에욱 댓글 2 좋아요 0 조회수 176

AuthenticationManager의 HttpSecurity 사용 부분에 질문 있습니다

해결됨

스프링 시큐리티 완전 정복 [6.x 개정판]

CustomAuthenticationFilter 관련 설명에서 AuthenticationManager는 빈이 아니기 때문에 주입받지 못해 @Bean 선언하면 안된다고 설명하셨는데요. AuthenticationManager를 bean으로 등록하고 CustomAuthenticationFilter를 bean으로 등록해서 AuthenticationManager를 주입받는 식으로 코드를 짜도 될 것 같은데 그렇게 하지 않은 이유가 securityFilterChain 내에서만 사용되기 때문에 bean으로 등록할 이유가 없기 때문인가요? 아니면 혹시 다른 이유가 있나요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
시나모롤 댓글 2 좋아요 0 조회수 176

SecurityContextPersistenceFilter & UsernamePasswordAuthenticationFilter

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

SecurityContextPersistenceFilter를 사용하고 폼 로그인 처리 방식을 사용한다고 하면 UsernamePasswordAuthenticationFilter를 사용할텐데 해당 필터는 스프링 시큐리티가 인증에 성공시 자동으로 세션에 시큐리티 컨텍스트를 저장한다고 했는데 SecurityContextPersistenceFilter 또한 finally에서 세션에 또 저장을 하니까 2번 저장하게 될까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
bae jewoo 댓글 2 좋아요 0 조회수 151

SecurityContextPersistenceFilter

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

안녕하세요 강의 재미있게 듣고 있습니다! SecurityContextPersistenceFilter를 사용하고 폼 로그인 처리 방식을 사용한다고 하면 UsernamePasswordAuthenticationFilter를 사용할 텐데 해당 필터는 스프링 시큐리티가 인증에 성공 시 자동으로 세션에 시큐리티 컨텍스트를 저장한다고 했는데 SecurityContextPersistenceFilter 또한 finally에서 세션에 또 저장을 하니까 2번 저장하게 될까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
bae jewoo 댓글 1 좋아요 0 조회수 122

AuthenticationManager 사용 방법­ HttpSecurity 사용

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

AuthenticationManager 사용 방법­ HttpSecurity 사용에서 @Bean 사용으로 CustomFilter를 빈으로 생성하면 안되는 이유가 AutenticationManager가 빈이 아니기 때문에 주입받지 못한다고 하셨는데 securityFilterChain(HttpSecurity http) 메서드에서 AuthenticationManagerBuilder를 통해 build() or getObject()사용으로 AuthenticationManager를 가져오고 .addFilterBefore(customFilter(autenticationManager)) 여기서 넘겨주면 파라미터로 AuthenticationManagerf를 받는게 아닌가요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
bae jewoo 댓글 2 좋아요 0 조회수 169

인기 태그

인프런 TOP Writers

주간 인기글