카테고리 없음

세션 인증 방식과 JWT 인증방식

태영9922 2024. 6. 19. 15:11

1. 인증과 인가

 1) 인증 : 사용자가 서버에 로그인을 요청하면 서버가 해당 사용자가 맞는지를 검증하는 과정. 로그인 등 증명과 관련. 

 2) 인가 : 인증 이후에 인증된 사용자에 대한 자원 접근 권한 확인 절차. 글 작성, 수정, 삭제 등 권한과 관련.

 

2. HTTP의 비 상태성 (Stateless) 

서버는 클라이언트의 상태를 저장하지 않기 때문에 클라이언트의 요청이 있을 때 마다 새로운 인증 절차를 거쳐야 한다.

하지만 이렇게 되면 서버에 요청을 보낼때마다 로그인을 하도록 요청을 해야 하는데 이는 매우 불편한 방식이다. 

 

3. 인증 과정

1) 세션 기반 인증

세션 기반 인증은 사용자의 인증 정보를 서버에서 저장하고 있는 방식이다. 클라이언트가 로그인을 하면 서버는 인증 정보를 서버의 세션 저장소에 저장하고, 클라이언트에게는 식별정보는 session id를 발급한다. 

브라우저는 인증절차를 마친 뒤 이후 요청마다 HTTP cookie 헤더에 session id 를 서버로 전송한다.

서버에서는 요청을 받고 session id가 서버의 세션 저장소에 존재하면 해당 사용자를 인증된 사용자로 판단한다. 

 

->>> 세션기반 인증 : 서버에서 사용자 정보를 가지고 인증

 

2) 토큰 기반 인증

토큰 기반 인증은 인증 정보를 클라이언트가 직접 가지고 있는 방식이다. 인증 정보는 토큰 형태로 로컬스토리지 또는 쿠키에 저장된다. 

대표적인 토큰인 JWT는 디지털 서명이 존재하기 때문에 내용의 위변조 여부를 서버에서 확인할 수 있다.

이 방식에서는 사용자가 서버로 요청을 보낼 때 가지고 있는 토큰을 HTTP의 Authorization 헤더에 실어 보내고 서버는 이를 토대로 토큰의 위변조 여부 및 만료 여부 등을 확인 한 뒤 사용자 인증 정보를 확인해 사용자를 인가한다.

 

4. 차이점

1) 세션의 경우 cookie 헤더에 session id만 실어 보내면 되므로 트래픽을 적게 사용한다. but! 토큰 방식의 JWT는 발급시각, 토큰ID등 담겨있는 정보가 session id에 비해 사이즈가 크므로 보다 많은 트래픽을 사용한다.

2) 보안과 안전성 : 세션의 경우 모든 정보를 서버에서 관리하기 때문에 보안측면에서 조금 더 유리하다. 탈취되더라도 서버에서 해당 session을 무효처리 하면 된다.

토큰의 경우는 클라이언트가 인증정보를 가지고 있기 때문에 탈취당하면 토큰이 만료되기 전까지 정보가 유출될 수 있다.

또한 payload가 별도로 암호화 되어있지 않으므로 누구나 내용을 확인할 수 있어 payload에 실을 수 있는 정보는 제한된다.

 

 

출처 : https://hudi.blog/session-based-auth-vs-token-based-auth/