로그인 인증 방식 종류 / 로그인 기능 구현 방법 및 장단점

쿠키 기반 로그인

사용자의 로그인 정보를 쿠키에 저장하여 인증을 유지합니다.
쿠키는 브라우저에서 볼 수 있고, 사용자가 다른 유저 ID로 변경할 수 있어 보안에 취약합니다.


세션 기반 로그인

사용자의 로그인 정보를 세션에 저장하고, 세션 ID는 쿠키에 저장하여 인증을 유지합니다.

세션 로그인 단점

세션은 서버 메모리에 저장되어야 하므로, 사용자가 증가함에 따라 서버에 부담을 줄 수 있습니다.

세션/쿠키 차이점

세션(Session) 서버에 저장되어 쿠키보다 보안성이 좋습니다.
브라우저 종료 시 사라집니다.
쿠키(Cookie) 클라이언트에 저장되고, 개발자 도구에서 값을 확인할 수 있어 보안에 취약합니다.
브라우저를 종료해도 만료기간 전에는 사라지지 않습니다.

Spring 세션 로그인 구현 방법

https://0songha0.github.io/web-dev/2022-10-24-1


JWT 토큰 기반 로그인

암호화 Access 토큰 인증 방식으로, JSON Web Token의 줄임말입니다.
로그인 요청 시 회원 DB에서 사용자 확인 후 서버에서 JWT 토큰을 발급해줍니다.
이후 클라이언트에서 요청할 때마다 Authorization header에 JWT 토큰을 담아 보내면 검증 후 데이터를 보내줍니다.

JWT 토큰이란?

JSON 형태의 Header(기본 세팅값), Payload(유저정보, 유효기간), 시크릿키 등을 base64로 인코딩한 것입니다. 디코딩과 변환이 매우 쉬우니 민감한 유저정보는 넣으면 안 됩니다.

JWT 토큰 로그인 장점

토큰은 클라이언트에 저장되기 때문에 별도의 세션 관리가 필요 없으니 서버의 부담을 덜 수 있습니다.

JWT 토큰 로그인 단점

JWT 토큰 길이가 길기 때문에, 요청이 많아지면 서버 트래픽에 영향을 미칠 수 있습니다.

JWT 보안 강화

JWT Access 토큰은 유효기간이 만료될 때까지 계속 사용이 가능하여 보안에 취약하기 때문에,
Access 토큰 유효기간을 짧게 해서 JWT Refresh 토큰과 함께 발급 후 만료될 때마다 확인하여 재발급하면 습니다.
단점은 구현이 복잡하고, 토큰 재발급 과정에서 서버의 자원 낭비가 생길 수 있습니다.


스프링 시큐리티 로그인

스프링 시큐리티 프레임워크를 사용하여 세션 기반 또는 JWT 토큰 기반 로그인 방식을 구현할 수 있습니다.
스프링 시큐리티의 Authentication 객체를 사용하여 사용자의 인증 정보를 세션 저장소에 저장합니다.

스프링 시큐리티 장점

권한에 따라 특정 URL에 대한 접근 허용 여부를 결정하기 때문에, 권한 제어 로직을 별도로 구현하지 않아도 됩니다.

스프링 시큐리티 사용 방법

https://0songha0.github.io/web-dev/2022-10-23-1

Leave a comment