해당 글은 Spring으로 구현한 프로젝트를 SpringBoot로 리팩토링 하는 과정을 담은 글입니다.
- Index -
[SpringSecurity] SpringSecurity + JWT 로그인 구현_1
[SpringSecurity] SpringSecurity + JWT 로그인 구현_2
[SpringSecurity] SpringSecurity + JWT 로그인 구현_3
[SpringSecurity] SpringSecurity + JWT 회원가입, 테스트 코드 작성
[번외]JwtAuthorizationFilter에서 상속받을 필터에 대한 고민
본 프로젝트에서 세션인증을 통한 로그인 기능을 구현하였는데 이를 토큰 기반 인증 방식으로 변경하려고 한다.
변경하기에 앞서 세션 기반 인증과 토큰 기반 인증의 차이점을 분석해보자.
세션 기반 인증 vs 토큰 기반 인증
세션 기반 인증 | 토큰 기반 인증 |
사용자의 인증 정보가 서버의 세션 저장소에 저장 | 인증 정보를 클라언트가 직접 들고 있는 방식 |
1) 클라이언트가 로그인 2) 해당 인증 정보 서버 세션 저장소 저장 3) 클라이언트에게 세션 정보 식별자 session id 발급, 브라우저 쿠키에 저장 4) 인증을 마치고 브라우저는 매 요청마다 HTTP Cookie 헤더의 Session id를 서버에 전송 5) 서버에서 요청을 전달 받아 Session ID에 해당하는 세션 정보가 세션 저장소에 있는지 확인, 존재하면 인증된 사용자로 판단(사용자 인가) |
1) 클라이언트가 로그인 2) 서버에서 JWT 토큰을 생성하여 클라이언트에 전달 3) 클라이언트는 전달 받은 JWT 토큰을 HTTP Authorization 헤더에 실어 보냄. 4) 헤더를 수신한 서버는 토큰이 위변조 되었거나, 만료가 되지 않았는지 확인, 토큰에 담긴 사용자 인증 정보를 확인 후 사용자 인가 |
** 인증 (Authentication)
인증이란 로그인과 동일. 아이디와 패스워드를 입력하여 서버에서 해당 유저가 있는지 확인하는 절차
** 인가(Authorization)
인가란 인증 이후에 하는 작업으로, 인증된 사용자에 대해 자원에 대한 접근 확인 절차
토큰 기반 인증 선택
차이점을 비교해본 결과 웹 어플리케이션의 서버의 확장성 및 부담 측면을 고려하여 토큰 방식으로 로그인을 구현해보고자 한다.
결론
토큰 기반 인증은 인증 정보를 서버가 직접 인증 방식으로 저장하지 않고, 클라이언트가 저장하는 방식을 사용하기에 세션 불일치 문제로부터 자유롭다. 서버 부담 측면에서도 세션 기반 인증은 세션 데이터 양이 많아지면 서버의 부담이 증가하는데, 이에 반해 토큰 기반 인증은 클라이언트가 인증 데이터를 가지고 있으므로 서버의 부담이 증가하지 않는다. 보안 측면에서는 인증 정보를 서버에서 관리하는 세션이 조금 더 유리하다.
참고 사이트
https://hudi.blog/session-based-auth-vs-token-based-auth/
세션 기반 인증과 토큰 기반 인증 (feat. 인증과 인가)
인증과 인가 세션기반 인가와 토큰기반 인가에 대해 알아보기 이전에 먼저, 인증과 인가가 무엇인지 부터 알아야할 필요가 있다. 인증과 인가를 같거나 비슷한 개념이라고 생각하는 사람들이
hudi.blog
'Spring > SpringSecurity' 카테고리의 다른 글
JwtAuthorizationFilter에서 상속받을 필터에 대한 고민 (3) | 2024.12.01 |
---|---|
[SpringSecurity] SpringSecurity + JWT 회원가입, 테스트 코드 작성 (0) | 2024.03.19 |
[SpringSecurity] SpringSecurity + JWT 로그인 구현_3 (0) | 2024.03.16 |
[SpringSecurity] SpringSecurity + JWT 로그인 구현_2 (0) | 2024.03.16 |