인증서
의 개념을 아예 사용하지 않고, 그냥 온전히 이메일과 비밀번호만 사용할 수도 있습니다.
기본 인증은 리퀘스트의 Authorization 헤더
를 사용
Authorization: Basic email:password
username:password
이 부분은 서버로 보내기 전에 base64url
인코딩합니다.
예를 들어 인증하려는 유저의 이메일이 codeit@example.com이고, 비밀번호가 ilovecodeit이라면, 문자열로 codeit@example.com:ilovecodeit 을 만든 후, 이 문자열을 base64url 인코딩합니다.
결과는 이렇게 나오는데요: Y29kZWl0QGV4YW1wbGUuY29tOmlsb3ZlY29kZWl0.
그럼 헤더는 이렇게 작성하는 거죠:
Authorization: Basic Y29kZWl0QGV4YW1wbGUuY29tOmlsb3ZlY29kZWl0
이렇게 한 후 리퀘스트를 보내면, 서버가 Basic을 통해서 뒤에 있는 정보가 기본 인증이란 걸 파악하고, 이걸 디코딩 해서 유저를 인증합니다.
기본 인증은 유저를 인증하는 자체에 있어서는 부족함이 없지만, 요즘은 거의 사용하지 않습니다. 바로 보안 문제가 생길 수 있기 때문이죠.
일단 영상에서 설명드렸듯이, 이메일과 비밀번호 조합은 누군가에서 노출됐을 때 세션 id나 토큰보다 훨씬 더 악용할 수 있는 여지가 많은데요. 모든 리퀘스트에 이런 민감한 데이터를 보내면 악의를 갖는 공격자가 중간에서 가로챌 위험이 커집니다. 또, 로그인 상태를 유지하기 위해서는 클라이언트가 이메일과 비밀번호를 어딘가에 저장해놓고, 가지고 와서 리퀘스트에 붙여야 되잖아요? 이렇게 민감한 정보를 브라우저에 저장해놓는 것도 마찬가지로 노출될 위험이 있기 때문에 안전하지 않습니다.
아직도 다양한 프레임워크들에서 세션과 토큰 기반 인증과 더불어서 기본 인증을 제공하기는 하지만, 위험하기 때문에 요즘은 거의 사용하지 않으니까요. 그냥 이런 게 있구나 정도만 알아두시고 넘어가셔도 괜찮습니다.