inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트 시큐리티 & JWT 강의

스프링부트 시큐리티 27강 - jwt토큰 서버 구축 완료

JWT Token 구현에서 Session 을 사용한다?

2974

강우석

작성한 질문수 22

2

안녕하세요 강사님. 이번 수업 너무 잘 들은 학생입니다.

다름이 아니라 JWT Token 을 필터단에서 Security에게 인가처리를 맡기기 위해 Security Context 에 Authentication을 저장한다고 하셨습니다.

이는 스프링 내 세션에 인증 객체를 저장해 두는 것으로 이해를 하였습니다.

 

1.수업중에도 설명해주셨듯이, 토큰을 사용하는 것은 세션에 인증 객체를 저장하지 않도록 해서 서버적으로 부하가 걸리는 상황을 방지하는 점이 큰 장점으로 이해하였으나, 결국 시큐리티에 인가를 맡기려면 세션에 저장하는 방법 밖에 없는지 궁금합니다. 필터들 사이에서 Authentication 정보를 주고 받아야 하니 스프링 시큐리티를 사용하려면 세션 저장 말고는 방법이 없는걸까요?

2.계속 생각하다보니 또 궁금해진 사항인데, [SecurityContextHolder 에 세션 정보를 저장해두는 것이 SpringSecurity 가 일반적으로 채택하고 있는 formLogin 방식에서 사용하는 세션 저장 방식]인 것으로 이해를 했습니다.
이 때, 왜 이 부분이 계속 세션을 저장해서 서버적으로 부하가 걸리게 하는 건지 잘 이해를 못한 것 같습니다.
Authentication 과정을 살펴보면 그 때 인증을 하기 위해 형성한 Authentication 객체는 그 요청을 처리하기 위해 Thread Local 에 있는 SecurityContextHodler 에 저장을 해두고 인가를 처리하게 됩니다. 하지만 그 과정을 끝내고 나면 Holder를 비워주고, THread도 종료되기 때문에 서버 자체에는 딱히 저장되는 것은 없지 않나요? 보안적인 측면 외의 SESSION 방식의 단점을 잘 이해하지 못한 것 같습니다. 간략하게 라도 도움주시면 감사할 것 같습니다.


2번을 먼저 이해해보는게 1번을 이해하는데 도움이 될 것 같긴 하네요.

강의도 너무 잘들었습니다. 미리 감사드립니다.

spring Spring Security jwt

답변 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