JWT Token 구현에서 Session 을 사용한다?
2974
작성한 질문수 22
안녕하세요 강사님. 이번 수업 너무 잘 들은 학생입니다.
다름이 아니라 JWT Token 을 필터단에서 Security에게 인가처리를 맡기기 위해 Security Context 에 Authentication을 저장한다고 하셨습니다.
이는 스프링 내 세션에 인증 객체를 저장해 두는 것으로 이해를 하였습니다.
1.수업중에도 설명해주셨듯이, 토큰을 사용하는 것은 세션에 인증 객체를 저장하지 않도록 해서 서버적으로 부하가 걸리는 상황을 방지하는 점이 큰 장점으로 이해하였으나, 결국 시큐리티에 인가를 맡기려면 세션에 저장하는 방법 밖에 없는지 궁금합니다. 필터들 사이에서 Authentication 정보를 주고 받아야 하니 스프링 시큐리티를 사용하려면 세션 저장 말고는 방법이 없는걸까요?
2.계속 생각하다보니 또 궁금해진 사항인데, [SecurityContextHolder 에 세션 정보를 저장해두는 것이 SpringSecurity 가 일반적으로 채택하고 있는 formLogin 방식에서 사용하는 세션 저장 방식]인 것으로 이해를 했습니다.
이 때, 왜 이 부분이 계속 세션을 저장해서 서버적으로 부하가 걸리게 하는 건지 잘 이해를 못한 것 같습니다.
Authentication 과정을 살펴보면 그 때 인증을 하기 위해 형성한 Authentication 객체는 그 요청을 처리하기 위해 Thread Local 에 있는 SecurityContextHodler 에 저장을 해두고 인가를 처리하게 됩니다. 하지만 그 과정을 끝내고 나면 Holder를 비워주고, THread도 종료되기 때문에 서버 자체에는 딱히 저장되는 것은 없지 않나요? 보안적인 측면 외의 SESSION 방식의 단점을 잘 이해하지 못한 것 같습니다. 간략하게 라도 도움주시면 감사할 것 같습니다.
2번을 먼저 이해해보는게 1번을 이해하는데 도움이 될 것 같긴 하네요.
강의도 너무 잘들었습니다. 미리 감사드립니다.
답변 1
3
1번 답은
세션이라는 것을 메모리적으로 본다면 그냥 클라이언트가 요청과 응답을 할 때까지 데이터를 보관할 장소로 보셔도 됩니다.
무상태성 설정을 했기 때문에 .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
jSessionId를 관리하지 않아서, 세션이 응답이 끝나면 사라지게 됩니다.
그냥 메모리 저장소에 용도로 잠시 사용하고 버리는 용도입니다.
그래서 지속적으로 세션 메모리를 사용하지 않고, 임시로 사용하고 버리는 용도이기 때문에 큰 부하는 없습니다.
그렇다면 왜 사용하는냐가 궁금하실수 있는데!!
스프링 시큐리티가 시큐리티 세션을 이용해서 권한처리를 해줍니다. 이 편리한 기능을 이용하려면 세션에 임시로 넣어두는 법이 편합니다. 이렇게 넣어둔다고 해도, 로그아웃 혹은 브라우저를 닫는다고 세션이 날라가는 것이 아니라, 응답이 끝나면 세션값은 사라지게 됩니다.
2번 답은 1번답에서 해결될 것 같습니다.
0
권한처리를 위해 세션을 사용하게 되면
서버가 여러대일 경우
어떤 서버에는 권한정보가 있고
어떤 서버에는 없을 수도 있지 않나요?
이런 경우 스프링 시큐리티가 자동으로 알아서 처리를 해주는건가요?
세션을 사용하지 않고 JWT 를 사용하는 이유중에 하나가
서버가 여러대 일 경우의 세션 문제를 해결하기 위함도 있다고 하셨는데
마찬가지로 서버가 여러대라면 권한처리를 위한 권한정보를 동일하게 맞춰(?) 주는 무엇인가가 필요하지 않나요?
JWT를 구현한 다음 이 API를 호출해서 사용하는 것은 프론트엔드 쪽에서 하는 역할인가요?
0
100
1
Jwt쓰면 스프링시큐리티는 필수적으로 사용해야하나요?
0
402
1
13:23 system.out 출력문이 다르게 나옵니다.
0
132
1
수료증 문의
0
231
2
9분대에 질문이 있습니다 !
0
117
1
password 비교를 하지 않았는데 어떻게 인증이 통과된 건가요?
0
322
1
이전 강의 참고하라는 말씀
0
253
1
강의 실습하다가 막히는 분들 참고(2024년8월 기준)
2
1120
2
구글 소셜 로그인 302
0
202
1
오류 문의 _ org.springframework.orm.jpa.JpaSystemException: could not deserialize
1
586
1
[자바] 시큐리티 Config 참고
13
954
1
이론강의
0
282
1
SpringSecurity JWT 로그인 URL 2개 설정하는 방법
0
490
1
2024.06기준) 최근 SecurityConfig 설정 문의
0
923
3
구글 로그인시 authentication이 null 값이라고 에러가 발생합니다.
0
681
2
특정 url필터 거는 방법 이슈
0
423
1
강사님께서 말씀하시는 시큐리티세션이 SecurityContext인가요?
0
280
1
25강 마지막 테스트에서 오류
1
1044
2
jwt를 저장하는 위치에 궁금한 점이 있습니다.
0
299
1
mustache를 사용하지 않고 thymeleaf를 사용하려고 하는데
0
701
1
세션 인증방식이 REST 원칙에 위배되는 건가요?
0
343
1
jwt와 실제데이터의 관계
1
248
1
jwt 와 세션ID의 관계
1
314
1
SecurityConfig에서 세션 설정, 인가 설정
0
424
1





