회원가입
과 로그인
을 뜻한다. 즉 자기자신을 식별하는 것
🚗 인증은 왜 필요한가?
우리 서비스를 누가 쓰는가, 어떻게 사용하는지, 추적이 가능하도록 하기 위해 필요.
ex) 국세청에 세금신고, 은행에서 계좌정보 조회할때 모두 식별 과정을 거쳐야 한다
🚗 인증에 필요한 것은?
아이디, 이메일주소, 비밀번호 등 (❗ 가장 중요한 것은 비밀번호
)
🚗 비밀번호는 어떻게 관리해야 하는가? (법규상)
개인정보보호법은 개인정보 암호화
에 대해서 다음과 같이 규정하고 있다.
🎃 비밀번호는 어떻게 관리해야 하는가?
통신 시 개인 정보를 주고받을 때 SSL을 적용하여 암호화(HTTPS)
SSL인증서(보안 적용)를 입혀서HTTPS
통신 이용 ➡ 네트워크 통신 자체가 암호화 됨
❗ HTTP는 안전하지 않다. 통신 시 개인정보를 주고 받을 때 SSL을 적용하여 암호화(HTTPS)
http
와https
의 차이:s
는 secure 의미. 네트워크 통신 자체가 암호화 된다는 뜻. (암호화된 안전한 사이트)
🎃 암호화는 어떻게 할까?
🍧단방향 해쉬
해쉬(hash)함수
는 빠른 자료의 검색, 데이터의 위변조 체크를 위해 쓰인다- 복원이 불가능한
단방향 해쉬함수
는 암호학적 용도로 사용한다- 많이 쓰이는 해쉬함수로는
SHA-256
,SHA-511
등이 있다.
(보안이 취약한 해쉬 함수로는 MD5, SHA-1 등이 있다)- "1234"를 SHA-256 해싱하면 아래와 같다.
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f97
❗ 결과만 봐서는 당장 식별이 불가능하므로 완벽해 보이지만, 같은 알고리즘으로 "1234"를 다시 해싱하면 같은 결과가 나온다.
❗ 이러한 허점을 이용해서 '가능한 경우의 수를 모두 해시값으로 만들어서 판매하는 서비스'도 존재(=Rainbow Table
, 해시값을 유추하여 판매)
👉 이러한 허점을 보완하고자salting
과Key Stretching
이라는 아이디어가 생겨났다. 비밀번호로 생성한 문자열(Salt)를 합쳐서 해싱하여 이 해시값을 저장하는 방법.
(salting & Key Stretching : 소금치고 늘린다)
📚 bcrypt
alting & Key Stretching 대표 라이브러리(오픈소스 라이브러리).
🚗 인가(Authorization)
HTTP
의 특징 2가지(1) request / response (요청과 응답)
(2) stateless한 성질 (저장하지 않는 성질)
🎃 서버는 사용자가 로그인 했을 경우, 로그인 했다는 것을 어떻게 알 수 있을까?
- headers에
메타데이터
를 보내서 확인한다- 이러한 메타데이터를
JSON Web Token (=JWT)
라고 한다.
➡ 요청1의 응답(response) 1에서200 OK
와 토큰을 함께 보낸다
➡ 요청2는 발행받은 토큰과 함께 요청보낸다(요청1의 사용자 메타데이터, 즉 토큰을 함께 보냄으로써 지속적 사용자 활동 추적이 가능)
👉 사용자가 로그인 하면 headers에메타데이터
(사용자 정보)를 담아서 보낸다
👉Token
(=메타데이터)을 통해 웹 내에서 사용자의 활동에서 지속적으로 사용자를 식별 및 추적한다.
📚 헤더(header)
에는 어떤 정보가 들어갈까?