로그인
우리 서비스를 누가 쓰고, 어떻게 사용하는가, 추적이 가능하도록 하기 위해 필요함.
아이디, 이메일 주소, 비밀번호
비밀번호 : 주요 개인정보는 암호화되지 않으면 법적 처벌을 받음
데이터베이스에 저장시 개인정보를 Hashing
하여 복원할 수 없도록 함.
Hashing 이란?
키 값에 직접 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근함. 키 값의 연산에 의해
직접 접근
이 가능한 구조를해시 테이블
이라고 부르고, 해시 테이블을 이용한 탐색을해싱
이라고 한다.
- 해싱에서는 자료를 저장하는데
배열
을 사용함.- 어떤 항목의 탐색 키만을 가지고 바로 항목이 저장되어 있는
배열의 인덱스
를 결정하는 기법- 각 탐색 키(매우 큼)를 작은 정수로 mapping 시키는
함수(=hash function)
가 필요함.
단방향 해쉬 : 복구 불가능
본래 해쉬함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해 쓰이지만
Salting
해쉬를 할때 (소금을 치듯이)
Key Strecthing
bcrypt : salting & Key Strecthing 의 대표적인 라이브러리
로그인 이후 "내 계정"으로 활동을 가능하게 허가해줌
: 사용자가 서버에 로그인하면 해당사용자가 맞는지 확인하는 과정이 인가
브라우저가 session ID란 이름의 쿠키(브라우저에 저장되는 정보)로 저장
다음 사이트에 요청을 보낼 때마다 쿠키를 보냄
서버에 로그인 되어있음이 지속되는 상태 = "세션"
단점 > 사용자 동시다발적이면 메모리 부족해짐, 휘발성임 (서버가 재부팅되면 메모리에 있던 것들이 다 날라감)
세션 정보가 날라가지 않게 넣어두는,
복잡한 구성과 환경에서 어떤 상태를 기억해야 함.
https://jwt.io/
객체형태, 딕셔너리 형태
서버가 기억하고 있지 않고 그냥 줘버림
http
바로 request/response 요청과 응답
stateless한 성질 = 저장하지 않는 성질
그래서
토큰을 줘서 계속 로그인 저장할 수 있게 함
aaaa.bbbbb.ccccc
헤더.내용.서명
서명 : jwt 원본그대로 라는 것을 확인할때 사용하는 부분
사용자가 로그아웃하면 토큰을 지워줘야함.
개발자도구 열어서 다 볼 수 있게 말고
안전하게 토큰을 전달해야함