[Auth] Basic Auth

박이레·2022년 11월 8일
0

Auth

목록 보기
1/4

 JPA같은 최신 기술을 사용하려면 JDBC부터 배워야 합니다. 물론 JDBC를 건너뛸 수도 있지만, 그럼 기초가 부실해집니다. 기초가 부실하면 쉽게 무너집니다.

JSON Web Token으로 토큰 기반 인증을 사용하려면 Basic 인증부터 배워야 합니다. Basic 인증을 배우고 Bearer 인증을 거친 다음 토큰 기반 인증을 배워봅니다. 탄탄한 인증이 되리라 생각합니다.


Basic 인증

상태가 없는(Stateless) 웹 애플리케이션에서 인증을 구현할 수 있는 방법은 무엇일까요? 가장 단순한 방법은 모든 HTTP Request에 ID와 PW를 같이 보내는 것입니다.

Basic 인증은 최초 로그인 이후 HTTP Request Header Authorization:에 ID와 PW를 :으로 이어 붙이고, Base64로 인코딩한 문자열을 함께 보냅니다.

Authorization: Basic dlrjsdPtldlqslek==

① 서버는 해당 요청을 수신하면 Base64로 인코딩된 문자열을 디코딩합니다.
② 디코딩한 아이디와 비밀번호를 DB의 레코드와 비교합니다.
③ 레코드가 일치하면 요청을 수행하고, 아니라면 거부합니다.


단점 ① - MITM에 취약

Basic 인증은 치명적인 단점이 있습니다. 아이디와 비밀번호를 노출합니다. Base64로 인코딩했다하더라도 디코더만 있으면 누구나 아이디와 비밀번호를 확인할 수 있습니다. 누군가 HTTP 요청을 가로채 문자열을 디코딩하는 것을 MITM(Manipulator in the Middle Attack, 중간자 공격)이라고 합니다. 따라서 Basic 인증은 HTTP와 사용하면 안되고, 반드시 HTTPS와 사용해야 합니다.

단점 ② - 로그아웃 불가

모든 요청이 로그인 요청이기 때문에 로그아웃을 할 수 없습니다. 모든 디바이스에서 로그아웃 기능을 제공하기 힘듭니다.

단점 ③ - DB 과부화 확률 ↑

작은 규모의 애플리케이션인 경우 스케일에 대해 고민할 필요는 없지만 서비스가 커지면 DB 과부화 확률이 올라갑니다. 모든 요청이 로그인 요청이기 때문에 요청 수만큼 인증 서버가 작동해야 하기 때문이죠.

단점 ④ - 인증 서버 단일 장애점

인증 서버가 단일 장애점(Single Point of Failure)이 될 수 있습니다. 전체 시스템을 가동불가하게 만드는 것이죠.




다음 글은 토큰 기반 인증(Bearer Token)에 대해 다룹니다.

💁‍♂️reference

React.js, 스프링 부트, AWS로 배우는 웹 개발 101

김다정 지음ㅣ에이콘출판ㅣ2022ㅣ도서 정보


EOD.

profile
혜화동 사는 Architect

0개의 댓글