- 사용자의 신원을 확인하는 과정이다.
- 신원은 보통 아이디와 비밀번호로를 말한다.
- 유저의 아이디와 비밀번호를 생성한다.
- 유저의 비밀번호를 암호화해서 DB에 저장한다.
- 유저가 로그인할 때 입력한 비밀번호를 암호화 후 DB에 저장된 비밀번호와 비교한다.
- 로그인 성공하면
access token
을 클라이언트에 전송한다.- 로그인 성공 이후부터는
access token
을 첨부해request
를 서버에 전송함으로서 매번 로그인하지 않아도 된다.
- 사용자의 비밀번호는 절대 그대로 DB에 저장하지 않는다
🤜 DB가 해킹 당하면 비밀번호가 그대로 노출되기 때문에
🤜 내부 개발자나 인력이 비밀번호를 볼 수 있기 때문에- 사용자의 비밀번호는 암호화해서 저장한다.
- 비밀번호 암호에는
단방향 해쉬 함수
가 일반적으로 쓰인다.단방향 해쉬 함수
는 원본 메시지를 암호화한다이제스트(digest)
를 생성한다.- 원본 메시지를 알면 암호화된 메시지를 쉽게 알 수 있지만 암호화된 메시지로는 원본 메시지를 알 수 없기에
단방향성
이라고 한다.
단방향 해쉬 함수의 취약점
🤜 해쉬 값을 미리 계산한 테이블인 Rainbow table
을 사용해 비밀번호를 추측할 수 있다.
단방향 해쉬 함수의 보완점
🤜
Salting
: 실제 비밀번호 이외에 추가적으로 랜덤 데이터를 더해서 해쉬값을 계산한다. 🤜key Stretching
: 단방향 해쉬값을 해쉬하는 과정을 반복하는 것을 말한다.
Bcrypt
는 Salting
과 key Sretching
을 구현한 해쉬 함수로 가장 많이 사용된다.
- 로그인에 성공하면
access token
이라는 암호화된 사용자 정보를 첨부해request
를 보낸다.- 서버에서는
access token
을 복호화해서 해당 유저의 정보를 얻는다.- JWT 는 이러한
access token
을 생성하는 기술로 사용자의 정보를 담은 JSON 데이터를 암호화해서 클라이언트와 서버간에 주고 받는 것이다.
request
를 실행할 수 있는 권한이 있는 사용자인지 확인하는 절차이다.- JWT 를 통해 구현될 수 있다.
- 인가 절차를 통해
access token
을 생성한다.- 사용자가
request
를 보낼 때access token
을 첨부해서 보낸다.- 서버에서는
access token
을 복호화한다.- 복호화된 데이터를 통해
user_id
를 얻어 DB 에서 권한을 확인한다.- 권한이 있으면
request
를 처리하고 없으면 401 또는 에러코드를 보낸다.