HTTP 기본적인 인증에 대해 알아보자.
인증
- 완벽한 인증이란 없음. 비밀번호는 유출될수있고, 신분증은 위조될 수 있음.
- 하지만 당신에 대한 여러 데이터는 당신이 누구인지 판단하는데 도움이 됨.

- HTTP의 인증요구/응답 프레임워크
- HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공함.
- 웹앱이 HTTP 요청 메세지를 받으면, 서버는 요청을 처리하는 대신, 현재 사용자가 누구인지를 알 수 있게 비밀번호 같이,개인정보를 요구하는 인증요구로 응답함.
- 사용자가 다시 요청을 보낼때는 인증정보를 첨부해야 함.
- 인증 정보가 맞지 않으면 서버는 클라에 다시 인증요구를 보내거나 에러를 낼 수 있음.
- 인증 프로토콜과 헤더
- HTTP는 필요에 따라 고쳐 쓸 수 있는 제어 헤더를 통해, 다른 인증 프로토콜에 맞추어 확장할 수 있는 프레임워크를 제공함.
- 요즘은 OAuth HTTP의 인증요구/응답 프로토콜을 사용함.
- 클라이언트가 서버로 인증하려면, 인코딩된 비밀번호와 그 외 파라미터들을 Authorization 헤더에 담아서 요청을 다시 보냄.
- 인증 요청이 성공적으로 완료되면, 서버는 정상적인 코드(eg. 200 OK)를 반환하며, 추가적인 알고리즘에 대한 정보를 Authentication-Info 헤더에 기술할 수도 있음.
- 보안 영역
- 서버가 클라로 인증요구를 할 때, realm 지시자가 기술되어 있는 WWW-Authenticate 헤더를 사용함.
WWW-Authenticate: Basic realm="Family"
- 웹 서버는 기밀문서를 보안 영역(realm) 그룹으로 나누며, 보안 영역은 저마다 다른 사용자 권한을 요구함.
- realm에 이메일 등 서버 호스트 명을 넣을 수 있음.
기본 인증
- 기본 인증은 가장 잘 알려진 HTTP 인증 규약임.
- 원래 HTTP/1.0에 기술되어 있었지만, HTTP 인증의 상세 내용을 다루는 RFC 2617로 옮겨짐.
- 기본 인증 헤더 예시
WWW-Authenticate: Basic realm=따옴표로 감싼 문서 집합 정보
Authorization: Basic base-64로 인코딩한 사용자 이름과 비밀번호
- 기본 인증은 Authentication-Info 헤더를 사용하지 않음.
- Base-64 사용자 이름/비밀번호 인코딩
- base-64 인코딩은 8비트 바이트로 이루어져 있는 시퀀스를 6비트 덩어리의 시퀀스로 변환함. 각 6비트 조각은 대부분 문자와 숫자로 이루어진 특별한 64개의 문자 중에서 선택됨.
- base-64 인코딩은 바이너리, 텍스트, 국제 문자 데이터를 문자열로 받아서 전송할 수 있게,그 문자열을 전송 가능한 문자인 알파벳으로 변환하기 위해 발명됨.
- base-64 인코딩은 국제 문자나 HTTP 헤더에서 사용할 수 없는 문자(큰따옴표, 콜론, 캐리지 리턴)을 포함한 사용자 이름이나 비밀번호를 보내야할 때 유용함.

- 프락시 인증
- 중개 프락시 서버를 통해 인증할 수도 있음.
- 프락시 서버에서 접근 정책을 중앙 관리할 수 있어, 회사 리소스 전체에 대한 접근 제어가 가능함.
기본 인증의 보안 결함
- 기본 인증은 악의적이지 않은 누군가가 의도치 않게 리소스에 접근하는 것을 막는데 사용하거나, SSL 같은 암호 기술과 혼용됨.
- 누구나 디코딩할 수 있음.
- base-64로 인코딩된 비밀번호는 사실상 비밀번호 그대로 보내는 것임.
- HTTP 트랜잭션을 SSL 암호화 채널을 통해 보내거나 보안이 더 강화된 다이제스트 인증 같은 프로토콜을 사용하는 것이 좋음.
- 제삼자는 사용자 이름과 비밀번호를 캡처하여 악용할 수 있음. 캡처한 정보를 통해 인증에 성공하고 서버에 접근함.
- 같은 이메일과 비밀번호를 사용하는 등 사용자들의 행동 패턴을 악이용함. 악의적으로 정보를 훔친 다음 금융 정보에 접근할 수 있음.
- 프락시나 중개자가 개입하는 경우 정상적인 동작을 보장하지 않음.
- 기본 인증은 가짜 서버의 위장에 취약함.
기본 인증은 일반적인 환경에서 개인화나 접근을 제어하는데 편리하며, 다른 사람들이 보지 않기를 원하기는 하지만, 보더라도 치명적이지 않은 경우에는 여전히 유용함. 기본 인증은 호기심 많은 사용자가 우연이나 사고로 정보에 접근해서 보는 것을 예방하는 데 사용함.
회사도 단순 사내에서 사용하기 때문에 기본 인증을 쓴더라도 악의적인 회사 직원이 비밀번호를 수집할 수 있음.