인증 - 회원가입과 로그인을 의미
아이디, 이메일주소, 비밀번호 등이 인증에 필요하고 이 중 비밀번호가 제일 중요
따라서 비밀번호를 잘 관리하는 것이 중요함
단방향 해쉬를 사용하여 암호화 함 (단방향 해쉬 --> 복원이 불가능)
해쉬의 단점
해쉬는 원본과 알고리즘이 같으면 동일한 값이 나와서 유추가 가능함. 이러한 허점을 이용하여 가능한 해쉬값의 경우의 수를 테이블로 만들기도 함(rainbowtable)
허점 보완
이러한 허점을 보완하고자 salting과 Key Stretching이라는 방법을 사용함
Salting
단순 해쉬값이 해킹에 쉽게 노출되기 때문에 Salting이 생겨남
입력한 비밀번호와 임의로 생성한 문자열(salt)를 합쳐서 해싱 --> 이 해시값을 저장 (이때 비교를 위해 해시값과 salt값을 같이 저장해야함)
Key Stretching
해커가 원본 값 유추하기 어렵게 만들기 위해 Salting 및 해싱을 여러번 반복하는 것
bcrypt
Salting & Key Stretching을 적용해주는 라이브러리
인가 - 사용자가 서버에 로그인하면 해당 사용자가 맞는지 확인하는 과정
HTTP의 stateless한 성질(저장하지 않는 성질)때문에 서버는 사용자가 요청을 보냈을 때 로그인한 상태임을 알 수 없음 --> request.headers에 사용자 정보 메타데이터를 보내서 확인함
서버와 클라이언트간에 본인확인을 위해 주고 받는 메타정보를 JWT(Json Web Token)라고 함
아래의 사진은 JWT의 구조
👍👍👍👍👍