💡 강의 노트와 세션 영상을 들은 후 다시 복습하기 위해 기록!!
비밀번호이다📝 로그인 절차
1) 유저 아이디와 비번 생성
2) 유저 비번 암호화 해서 DB에 저장
3) 유저 로그인 -> 아이디와 비밀번호 입력
4) 유저가 입력한 비밀번호 암호화 한후 암호화되서 DB에 저장된 유저 비밀번호와 비교
5) 일치하면 로그인 성공
6) 로그인 성공하면access token을 클라이언트에게 전송
7) 유저는 로그인 성공후 다음부터는access token을 첨부해서 request를 서버에 전송함으로서 매번 로그인 해도 되지 않도록 한다
비밀번호는 DB에 저장 시 개인 정보를 해싱하여 복원할 수 없도록 함
💡 비밀번호 어떻게 구분할 수 있을까?
- 암호화된 값을 복호화하지 않고
들어오는 값(유저가 입력한 비밀번호)을 암호화하여
DB에 저장된 데이터(암호화된 비밀번호)와 비교한다
동일한 평문(원본 비밀번호)는 암호화 될 때마다 똑같이 암호화가 되게 만들어 준다
그래서 암호화하는 방식을 각각의 사이트마다 다르게 하기 위해서 SECRET KEY를 준다
(SECRET KEY, SALT 등)
구조 : 알고리즘 + 알고리즘 옵션(반복 횟수) + 소금값(항상 바뀌는 값) + 해싱한 비밀번호
💡 서버는 사용자가 로그인했을 경우, 로그인했다는 것을 어떻게 알 수 있을까?
http header에메타데이터를 보내서 확인함 ->JWT(JSON Web Tokens)
토큰 기반 인증방식!
access token이라고 하는 암호화된 유저 정보를 첨부해서 request를 보내게 된다헤더(header) + 내용(payload) + 서명(signature)헤더(header) : 토큰의 타입, 해시알고리즘 정보가 들어감 - 양방향/복호화 가능
예시) {"alg": "HS256", "typ" : "JWT"}
내용(payload) : 식별할 수 있는 정보, exp와 같이 만료시간을 저장 - 양방향/복호화 가능
예시) {"user-id": 1, "exp" : 1539517391}
서명(signature) : JWT가 정상적으로 암호화가 되었는지, 원본 그대로라는 것을 확인할 때 사용하는 부분 - 단방향/복호화 불가능
-> 계약서의 위변조를 막기 위해 서로 사인하는 것고 같다고 보면 된다