https://lgphone.tistory.com/65
세션에 대한 내용은 위 글을 참고한다.
인증 방식으로는 크게 두 가지가 최근 웹 개발 트렌드에서 많이 쓰인다. 바로 세션 기반 인증과 토큰 기반 인증이다. 두 가지의 차이점과 어떤 상황에서 어떤 인증 방식을 사용하는 것이 좋을지 한번 다뤄보자.
세션 기반 인증
세션 기반 인증은 쿠키를 사용한다. 인증 절차는 다음과 같다.
- 유저가 로그인을 하면 세션이 서버 메모리에 저장된다. 이 때, 세션을 식별하기 위한 session id가 주어지며, 이를 기준으로 정보를 저장한다.
- 브라우저는 쿠키로 session id를 저장한다.
- 쿠키에 정보가 담겨있기 때문에 브라우저는 해당 사이트에 대한 모든 request에 session id를 쿠키에 담아 전송한다.
- 서버는 클라이언트가 보낸 session id와 서버 메모리로 관리하고 있는 session id를 비교하여 verification을 수행한다.
장점
- 구현이 명확하며, 실제 서버에서 로그인 상태 확인이 굉장히 유용하다.
- 상대적으로 안전한 편이다. 서버측에서 데이터를 관리하기 때문에 클라이언트 변조에 영향받거나 데이터 손상 우려가 없다.
단점
- 서버 메모리에 세션 정보를 저장하기 때문에 이용자가 많을 경우 서버에 부담이 될 수 있다.
- 서버 메모리에 세션 정보가 저장되기 때문에 Scale Out/ In이 부담이 될 수 있으며, 결국 유저 상태에 무관하게 동작할 수 있도록 Data-Driven 아키텍쳐가 요구된다.
- 멀티 디바이스 환경에서 로그인 시 신경써줘야할 부분들이 생긴다.
토큰 기반 인증
토큰 기반 인증의 방법으로 많은 웹서버들은 JSON Web Token을 사용한다. 토큰 기반 인증 방식은 유저의 정보가 서버에 저장되지 않는다. 인증절차는 다음과 같다.
- 유저는 로그인을 하면 서버에서 토큰을 발급받는다.
- 클라이언트 (유저) 는 발급된 토큰을 저장한다 (local storage).
- 클라이언트는 요청 시 저장된 토큰을 헤더에 포함시켜 보낸다.
- 서버는 매 요청시 클라이언트로부터 전달받은 헤더의 토큰 정보를 verification 한 뒤, 해당 유저에 권한을 인가한다.
장점
- 클라이언트에 저장되기 때문에 서버의 메모리에 부담이 되지 않으며, Scale에 있어 대비책을 고려할 필요가 없다.
- 멀티 디바이스 환경에 대한 부담이 없다.
단점
- 상대적으로 손상의 위험이 크다.
- 구현을 하다보면 서버측에 token blacklist를 관리하게 될 가능성이 있고, 그렇다면 서버측 메모리의 소모가 발생한다.
- 토큰은 일반적으로 session id보다 길다.
- XSS 공격에 취약할 수 있어 민감한 정보는 포함시키지 않을 필요가 있다.
토큰 기반 인증 때 쓰이는 JWT (JSON Web Token) 에 대한 학습은 다음 사이트에서 할 수 있다.
토큰 기반 인증에 대해 더 자세히 알고 싶다면 다음 포스트를 참고한다.
https://yonghyunlee.gitlab.io/node/jwt/
출처
'Web | Network' 카테고리의 다른 글
Web - DNS (Domain Name Server) (0) | 2022.03.19 |
---|---|
Web - API (0) | 2020.08.16 |
Web - IP, 포트, 그리고 로컬호스트 (IP, Port, and Localhost) (2) | 2020.08.12 |
Web - REST (0) | 2020.08.08 |
Web - HTTP 상태 코드 (HTTP Status Code) (0) | 2020.08.08 |