항해 취리코/JWT
스프링 시큐리티 + JWT
j1ngerhead
2024. 8. 15. 13:51
구현한 거 헷갈리지 않게 설명 적어 두기 !
헷갈렸던 부분이 시큐리티랑 jwt 로그인이라고 하니
둘 다 혼용한 건가 ? 아님 jwt를 구현할거라면 시큐리티 관련은 빼고
jwt로만 구현하면 되는건가 싶었는데
보통 jwt 구현할 때 쌩(?)으로 하지 않고
시큐리티 설정을 하고 jwt 방식으로 변경해서 활용하는 것 같다.
아주 쌩으로 구현할 수도 있다고 들었는데 그건 수동으로 작업해주어야
할 부분들이 생긴다 하여 시큐리티와 함께 활용하는 방향으로 갔다.
스프링 시큐리티는 세션 방식으로 이루어졌고
jwt 쓰면서 시큐리티 기본 설정을 사용하지 않은 것으로
이제 이 프로그램에서 유저 관련 인증 및 인가는
세션 방식 x 토큰 방식이 된 것을 온전히 이해하기 시작함 !!!
JWT 기반 인증 시스템
- 로그인/로그아웃 구현
JWT를 사용하여 인증을 처리
로그인 시 JWT를 발급하고
로그아웃 시에는 클라이언트의 쿠키에서 JWT 삭제되게 함 !!
- 세션 사용 안 함
설정 파일에서 기존의 세션 기반 인증을 사용하지 않고 JWT 기반 인증으로 설정
이로 인해 서버는 세션 상태를 저장하지 않고 클라이언트 측에서 JWT를 관리함
- 서버의 역할
- 토큰 관리: 서버는 JWT를 직접 저장하거나 관리하지 않는다 → JWT는 클라이언트의 쿠키에 저장됨
- 로그아웃 처리: 서버는 로그아웃 시 클라이언트에게 쿠키를 만료시키는 응답을 보내 JWT를 삭제함
서버 측에서는 JWT를 직접적으로 건들지 않는다 !! ( 그냥 딱 들어오는 요청에 대해 토큰으로
- Stateless: JWT 방식은 서버가 상태를 유지하지 않는 stateless 방식
서버는 클라이언트의 요청을 처리할 때마다 JWT를 검증하지만, 사용자 세션 상태를 서버에 저장하지 않는다. - 서버가 건들지 못하는 이유:
JWT는 클라이언트 측에서 저장되고 관리되므로
서버는 JWT를 직접적으로 수정하거나 삭제할 수 없기 때문에
로그아웃 시 쿠키를 만료시켜 클라이언트 측에서 JWT를 삭제하도록 한다.
추가로 내 코드를 gpt에게 알려 주면 좀 더 확실히 내가 했던 부분에 대한 설명을 확인할 수 있었다.
결론은 jwt을 사용하면 서버에서는 들어오는 요청에 대해 토큰 가지고 인증 및 인가만 해주면 되는 것 !!!
320x100