인증이란 회원가입과 로그인을 의미한다.
개발자의 관점에서 우리가 제공하는 서비스를 누가 사용하는지, 어떻게 사용하는지(유료, 무료 등) 추적을 하기 위해 필요하며, 마케팅 또는 이슈 발생 시 대처를 위한 목적이 있다.
인증에 필요한 것은 아이디, 이메일주소, 비밀번호 등이 있는데, 이 중 비밀번호가 가장 중요하다.
주소 옆에 자물쇠 잠겨있는 그림이 있는 건 SSL 인증서를 적용해 HTTPS로 보내지고 있다는 뜻이다.
list
, string
처럼 자료형 중 하나로 함수이다.salting & Key Stretching 대표적 라이브러리로 무료이며 사용하기 간편하며 거의 모든 언어를 지원한다. 해쉬 결과값에 salt값과 해쉬값, 반복 횟수를 함께 보관하기 때문에 비밀번호에 해싱을 적용하는데 있어 DB설계를 복잡하게 할 필요가 없다.
bcrypt를 통해 해싱된 결과 값(digest)구조는 아래와 같다
사용자가 서버에 로그인을 하면 해당 사용자가 맞는지 확인하는 과정.
HTTP의 stateless특징으로 인해 필요한 과정이다.
access token
을 생성하는 방법 중 가장 널리 사용되는 기술 중 하나.
유저 정보를 담은 JSON데이터를 암호화하여 클라이언트와 서버간에 주고 받는 것.
process
- 유저가 로그인에 성공한 후에는 access token
이라고 하는 암호화된 유저 정보를 첨부해서 request를 보냄
- 그러면 서버에서는 access token
을 복호화해서 해당 유저 정보를 얻음
- 복호화해서 얻은 유저 아이디를 통해 해당 유저가 누군지 알 수 있게됨
즉, 유저가 로그인을 하면 그 유저에게 Token을 부여해서 해당 이용자가 어떠한 활동을 할 때 토큰을 통해 유저의 로그인 여부를 확인할 수 있다.
JWT의 구조
헤더
: 토큰의 타입과 해시 알고리즘 정보가 들어감 - 예시. {"alg":"HS256", "typ":"JWT"}
내용
: 만료시간을 나타내는 공개클레임, 클라이언트와 서버간 협의하에 사용하는 비공개클레임(유저정보), 두가지 요소를 조합하여 작성됨 - 예시. {"user-id":1, "exp":1539517391}
서명
: JWT가 원본 그대로라는 것을 확인할 때 사용