로그인이란 무엇인가?
- 사용자가 시스템에 액세스하기 위해 식별자 정보를 입력하는 것으로, 컴퓨터 보안 절차의 필수적인 부분이다.
- 해당 사용자는 시스템의 제한된 파일 및 프로그램 세트에만 액세스 할 수 있다.
- 시스템 로그 파일에 자동으로 입력되는 데이터 형식의 감사 추적도 제공.
- 👉🏽 사용자가 시스템에 접근하거나 동작을 수행하는 것을 제어하고 기록하기 위한 컴퓨터 보안 절차
1. 로그인 구현을 위해 FE가 해야하는 일
- 로그인 페이지
- 로그인 인증관련 데이터 관리 (토큰, 세션..)
- 로그인 상태에 따른 화면/기능 제어(권한이 없는 자원에 접근하지 않는 구조 만들기)
- url로 직접 접근해도 404리턴
2. 로그인 동작
- 유저가 유저네임, 패스워드 등을 서비스에 전달하면 서비스는 이걸 비식별화해서 가지고 있다가 인증
- 매번 이 동작을 하지 않기 위해서 토큰 혹은 세션이란 방식으로 로그인이 유지되는 구조를 만든다.
3. Session vs JWT
JWT
- 웹에서 사용하기 위해 만든 표준 토큰 => Json Web Token
- 3가지 부분으로 베이스 인코딩 되어있다. (헤더, 페이로드, 시그니쳐)
- 무상태(stateless)이다.
- 유저 진입 시 토큰 확인
- 토큰이 유효한지 확인 (서버에 토큰 보냄)
- 없으면 로그인 진행하거나 토큰 재발급
- 있으면 토큰 사용
- 리프레쉬 토큰
세션
세션: 사용자의 로그인 이후 로그아웃 혹은 로그인 만료까지의 기간
세션 방식 로그인: 사용자 로그인이 유효한 시간 동안 서버에 세션 아이디를 기록해 두고 인증에 사용하는 방식
세션 로그인 방식
- JWT방식과 다르게, 서버로부터 전달받은 토큰을 브라우저에 보관하여 요청 시 마다 제출하는 것이 아니라, 세션 id를 서비스에 기록해두고 사용하는 방식임
- 유저 진입 시 서버에 바로 물어보면 됨
- 알면 그대로 쓰고, 모른다고 하면 로그인 진행
토큰, 세션의 장단점
토큰
- 서버/백엔드 비용 감소
- 프론트엔드 복잡도 높아짐
- refresh token 등의 전략 필요
- 보안상 세션보다 조금 더 위험
- 어떻게든 탈취될 위험이 남아있음
세션
- 서버/백엔드 비용 대폭 증가 (세션을 유지해야 함)
- 프론트엔드 인증 쉬워짐
- 보안상 약간의 향상
정리
- 세션 방식은 토큰 방식에 비해 서버 부담이 크고 추가 인프라가 필요
- 토큰 방식은 탈취될 수 있다.
- 오랫동안 세션이 유지되어야하면 토큰이 좋음
4. CORS(Cross-Origin Resource Sharing) 이슈
- 프론트엔드에서 단순 호출하기 (일시적)
- 프론트엔드에서 쿠키까지 쓰려면? (로컬호스트에서 http여서 발생하는 문제가 해결됨)
🔗 프리온보딩 학습내용입니다.