기록을 합시다.
세션 기반 인증과 토큰 기반 인증 본문
혼자 프로젝트를 진행하면서, 로그인 인증을 어떻게 할지 고민을 해봤다.
Django로 할 때는 아무 생각 없이 authenticate 하나 써서 사용자 인증을 했었는데, Next.js로 하니 확실하게 공부를 하게 되는 것 같다. 아무튼 그 과정에서 공부해 본 것들을 간단하게 정리해봤다.
세션 기반 인증
세션 기반 인증은 서버가 사용자가 로그인 중임을 기억한다는 뜻이다. 사용자가 로그인을 하게 된다면, 서버는 세션 저장소(파일 혹은 DB)에서 사용자의 정보를 조회 하고, 세션 id를 발급한다. 이 때, 발급된 id는 사용자의 브라우저에 쿠키로 저장된다. 그 후에 사용자가 헤더에 id를 담아 요청을 보낼 때마다 서버는 세션 저장소의 정보(세션)을 조회한 후, 로그인이 되어있다는 것이 확인 되면 그 요청을 처리해준다. 그러나 세션 기반 인증은 서버의 리소스를 많이 차지할 수 있다는 것을 고려해야 한다.
토큰 기반 인증
토큰은 사용자가 로그인을 하면, 서버가 사용자에게 토큰을 만들어 줘 지급해준다. 토큰은 문자열로 이루어져 있는데, 그 문자열을 복호화 하면 사용자의 정보와 서명을 확인할 수 있다. 이 때, 서버에서 서명 데이터를 암호화 하는 방식은 SHA256 방식이다. 키는 서버만 가지고 있기 때문에 서버 외에서는 복호화가 거의 불가하다. (단방향 암호화 특) 사용자는 지급 받은 토큰을 헤더에 담아 서버에게 요청을 보낸다. 서버는 헤더의 토큰이 유효한지 검사하고, 유효하다면 요청을 처리해준다. 토큰 기반 인증은 세션 기반 인증과 다르게 사용자의 로그인 정보를 저장하는 저장소를 갖고 있지 않다.
아마도 나는 토큰 기반 인증을 선택할 것 같다.
토큰 기반 인증이 더 쉬워 보이기도 하고, 최근에 사람들이 많이 쓰는 추세인 것 같아서이다.
다음에는 토큰 기반 인증을 통해 구현한 로그인 기능을 포스트 하겠다.
'공부 > etc' 카테고리의 다른 글
HTTP, Session, Cookie 정리 (0) | 2023.05.20 |
---|---|
Hyper-V Ubuntu 디스크 용량 늘리기 (0) | 2023.04.21 |
[docker] Mount 명령어를 이용해 컨테이너끼리 폴더 공유 하기(feat. Apache, Tomcat) (0) | 2023.04.21 |
[docker] network 명령어를 이용해 Apache2+Tomcat9+MariaDB 연결하기(feat. WAR 파일) (0) | 2023.04.21 |
기본적인 컴퓨터 구조 (0) | 2023.03.14 |