Authentication/Authorization
Authentication/Authorization (인증과 인가)
1. 인증이란?🤷
회원가입과 로그인🆗
- 아이디, 이메일, 비밀번호 등의 인증이 필요
- 누가 어떻게 쓰는지 추적 하기위해 추적을 가능하게 하기 위해 필요
- 개인정보가 포함되어 있기 때문에, 항상 주의 해야 함!
- 가장 중요한 것은
비밀번호
개인정보 보호법👀
- 법으로 지정하여 비밀번호를 암호화 하여 엄격히 보호해야 한다는 법이 있음
- 수집 받는 개발자도 몰라야 하기에 암호화 하는 library 도 있음
- 통신 시에 암호와 되어 있어야 한다
https://
에s
가 붙으면 인증이 필요한 사이트 라는 뜻, 쉽게 사이트 내용을 알아낼 수 없다.
2. 비밀번호 암호화는 어떻게 이루어지는가?
- 단방향 해쉬를 사용하여 암호화 하는데, 점점 강력한 비밀번호 암호화 생성을 위해 SHA-256 가 나왔고, 지금은 더 높은 보안체계를 위해 Salting,Key Stretching 아이디어 또한 생겨났다.(비밀번호와 임의로 생성한 문자열을 합쳐서 해시값에 저장하는 법)
3. bcrypt
- Salting/Key Stretching의 대표적인 라이브러리이다
- 단방향 해쉬함수 사용해서 db설계를 복잡하게 할 필요가 없이 자체적으로 hash결과값에 소금값 및 해시값을 반복적으로 같이 보관하기 때문에
4. 인가란? 🤷
- 사용자가 로그인하면, 해당 사용자가 맞는지 확인하는 과정이
인가
이다.
JSON WEB TOKEN
을 정상으로 로그인할 때 받게 됨.
JSON Web Token
Header - Payload -Signature
로 구성되어 있다.
- Header에는 토큰 타입과 해시 알고리즘 정보가 들어간다.
- Payload 에는 토큰 정보 또한 직접적인 정보가 아닌 primary key 정보가 들어가서 쉽게 알수없는 정보를 넘기는 게 아니라, 쉽게 식별할 수 없는 키를 넘겨준다. 토큰의 유효 기간을 넘겨주는것도 일반적이다.
- Signature에는 앞에 정보를 암호화 한 내용이 들어간다고 볼 수 있다.
- JSON Weg Token을 frontend는 받아서 다시 backend로 넘겨 주어야함