인증(Authentication)
가장 자주 구현되는 API
오픈된 사이트든 폐쇄적인 사이트이든 기본적으로 구현필요
- 유저의 정보를 확인하는 절차
- 보통은 거의 로그인할 때 아이디와 비밀번호를 확인하는 절차
- 인증에는 아이디와 비밀번호를 생성하는 절차도 필요
<aside>
💡 로그인 절차
유저 아이디와 비밀번호를 생성 👉비밀번호를 암호화 후 저장 👉 유저 아이디와 비밀번호 입력 👉입력한 비밀번호 암호화 👉 암호화되서 DB에 저장된 유저 비밀번호와 비교 👉로그인 성공하면 access token을 클라이언트에게 전송 👉로그인에 성공하면 그 뒤로부터는 access token를 첨부하여 requeset를 서버에 전송하여 매번 로그인이 불필요
</aside>
유저의 비밀번호 암호화
- 유저의 비밀번호를 절대로 DB에 그대로 저장하지 않는다.
- DB 해킹되면 그대로 노출될 가능성이 높다.
- 내부의 사람들이 비밀번호를 볼 가능성이 있다.
- 유저의 비밀번호는 꼭 암호화 저장 필요
- 암호화 저장하면 해킹으로 인한 노출 가능성이 적어진다.
- 내부에도 알 수 없다.
- 비밀번호는 단방향 해쉬 함수가 쓰인다.
- 평문 → 암호화 엔진 → 암호문
- 원래 메세지를 변환하여 암호화된 메세지(다이제스트)로 변환한다.
- 암호화된 메세지를 구하긴 쉬워도 암호환된 메세지로 원래 메세지를 구하긴 어렵다.
<aside>
💡 해쉬란?
어떤 문자열을 짧은 길이의 값이나 키로 변환하는 것
원본 데이터에서 약간만 바껴도 해쉬값은 변하기 때문에 해쉬값이 정확하다는 것을 보여준다.
</aside>
단방향 해쉬 함수의 취약& 보완