유저의 identification을 확인하는 절차
이 때 인증에 필요한 게 뭐가 있을까? 바로 ID, PW, E-mail등이다.
따라서 인증을 한 마디로 쉽게 말하면 로그인
access token
을 발급 (로그인 인증 증명서 같은 느낌)access token
을 첨부해 request를 보내기 때문에, 계속해서 로그인을 하지 않아도 된다. user의 비밀번호는 해킹, 보안 이슈로 인해 암호화된 후 DB에 저장된다.
일반적으로 단방향 해쉬 함수(one-way hash function)가 쓰인다.
단방향 해쉬 함수는 미리 해쉬값들을 계산해 놓은 테이블(Rainbow Table)을 활용해 해킹될 수 있다는 단점이 있다. 이러한 단점을 보완하기 위한 것이 Salting과 KeyStretching!
입력한 비밀번호에 임의로 생성한 문자열(Salt)를 합쳐서 해싱하고, 이 해시값을 저장하는 방법
ex. pw를 아자아자123
이라고 생성한다면, salt가 합쳐진 해시값
asdfghjkl아자아자123
이 DB에 저장된다.
단방향 해쉬값을 계산 한 후 그 해쉬값을 또 해쉬 하고, 또 이를 반복하는 것
ex. asdfghjkl아자아자123
를 여러 번 해쉬한다!
Salting & Key Stretching을 도와주는 대표적인 라이브러리
HTTP의 특징 중 하나인 stateless (이전 상태를 기억하지않는다)에 의하면 user는 로그인이 성공한 뒤에도 매번 로그인을 다시 반복해야한다.
앞쪽의 인증 절차를 소개할 때, 위 문제가 일어나지 않도록 인증이 완료되면 증명서와 같은 access token
(암호화된 유저정보)을 발급한다고 했다. server는 이 access token
을 복호화해서 유저정보를 얻게된다.
access token
을 생성하는 기술중 가장 널리 이용되는 것이 JWT(JSON Web Tokens)이다. 유저 정보가 담긴 JSON 데이터를 암호화 해서 클라이언트와 서버간에 주고 받는 것을 뜻한다.
header. payload. Signature
request를 요청하는 user가 권한이 있는지를 확인하는 절차
ex. 넷플릭스 유료회원만 영화를 볼 수 있다 / 회원만 특정 페이지에 접근할 수 있다.
access token
을 생성한다.access token
을 첨부해서 보낸다.access token
을 복호화 하고, user 정보(ID, PW 등)를 얻는다.