인프런 커뮤니티 질문&답변

라이제님의 프로필 이미지
라이제

작성한 질문수

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

마지막 27강에 세션 저장에 대해 궁금한점이 있습니다.

작성

·

258

1

 
이 부분에서 잘 이해가 안가는것이 있어 질문드립니다.
첫번째는, 저 밑줄 친 부분은 이미 정상적으로 jwt토큰 검증이 끝난 케이스인데 저 때 해당 권한처리를 위한 세션을 저장한다고 하면
권한 요청이 필요한 uri에 들어갈때 마다 계속해서 세션을 저장하게 되는것인가요? 예를들어 게시글 작성, 프로필 보기 이런 링크를 탈 때마다
밑줄 친부분이 실행이 될텐데 그렇다면 동일한 user의 권한을 중복되서 저장되는게 아닌가 싶어서 질문드립니다.
 
두번째는,처음에 로그인할때 권한을 세션에 저장하는 것이 아니라 저렇게 권한 요청이 있을때 세션에 권한을 저장하는 형식으로 만드는 이유가 궁금합니다.
 
끝으로, 정말 수업 재밌게 잘들었습니다. 궁금해서 답답했던 부분이 이 강의 하나로 "뻥"하고 해소된 느낌입니다.
좋은 강의 감사합니다!
 

답변 1

0

최주호님의 프로필 이미지
최주호
지식공유자

첫번째, 두번째 질문에 답변입니다.

 

JWT를 사용하는 이유는 세션을 사용하지 않기 위해서죠? 즉 인증을 할 때 하나의 서버에 종속되지 않기 위해서에요. 서버가 여러대가 되면 서버 마다 세션을 가지고 있기 때문에 JWT로 토큰 검증을 통해 인증을 합니다.

 

JWT로 토큰 검증을 하여 인증을 하게 되면, 토큰 내부에 개인 primary key가 있기 때문에 그것을 유저를 구분하고 권한처리가 가능하나, 단점이 있습니다.

 

/user, /board 등 특정 주소로 요청이 올 때 그 주소에 대한 권한이 있는지를 매번 JWTAuthorization에서 체크해야 한다는 것입니다. 이게 생각보다 엄청 귀찮아요.

 

그래서 그냥 세션에 집어 넣어버리면, 시큐리티가 특정 주소마다 권한 처리를 해줄것이기 때문에 그냥 시큐리티에게 맡겨버리는 겁니다. 그럼 편하자나요 ㅎ 안써도 되요. 대신 안쓰면 직접 주소마다 권한 처리를 해줘야 해요.

아니면 스프링 인터셉터를 써야해요.

 

권한 요청이 있을 때마다 세션에 저장하는 이유도 그 시점에만 잠시 세션에 임시로 저장해두고 그걸 통해 시큐리티로 권한처리를 하고, 요청이 올 때마다 서버가 4대라면 어느 서버로 갈지 모르기 때문에 특정 서버에 종속시키지 않기 위해서에요. 이해가 가시나요? 

 

 

 

라이제님의 프로필 이미지
라이제
질문자

아 서버가 여러대면 해당 토큰유저에대한 세션정보가 안남아있는 서버에 접근할수도 있으니 그때그때 생성하는것이군요. 세션을 쓰는 이유와 왜 그때그때 세션에 저장하는지는 알겠습니다

그렇다면 이미 토큰에 맞는 권한을 세션에 저장한 서버에 접근해서 권한처리를 할때는 시큐리티세션홀더.set세션 부분에서 내부와 principalDetail과 비교해서 존재하면 따로 저장을 안하게되는것인가요?

최주호님의 프로필 이미지
최주호
지식공유자

오 이해를 잘하시네요 ㅎㅎ

 

그렇다면 부분은 그렇게 해도 되지만,,, 굳이 그렇게 하면 귀찮으니까 ㅋㅋㅋ 안해요 ㅎ

라이제님의 프로필 이미지
라이제
질문자

넵 알겠습니다!ㅎㅎ

다시 한번 좋은 강의와 답변 감사합니다!

정말 기초부터 세션,쿠키와의 차이점, 중간중간 네트워크 설명까지 뭐하나 빠질게 없는 정말 좋은 강의였습니다!!

라이제님의 프로필 이미지
라이제

작성한 질문수

질문하기