기본 인증
서버는 사용자가 누구인지 식별할 수 있어야 한다. 사용자가 누구인지 알면, 그 사용자가 어떤 작업이나 리소스에 접근할 수 있는지 결정할 수 있다. HTTP는 자체적인 인증 관련 기능을 제공한다.
HTTP의 인증요구 / 응답 프레임워크
HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다.
웹 애플리케이션이 HTTP 요청 메시지를 받으면, 서버는 요청을 처리하는 대신에 현재 사용자가 누구인지를 알 수 있게 비밀번호 같이 개인 정보를 요구하는 '인증요구'로 응답할 수 있다.
사용자가 다시 요청을 보낼 때는 인증 정보(사용자 이름과 비밀번호)를 첨부해야 한다. 만약 인증 정보가 맞지 않으면 서버는 클라이언트에 다시 인증요구를 보내거나 에러를 낼 수 있다.
인증 프로토콜과 헤더
HTTP는 필요에 따라 고쳐 쓸 수 있는 제어 헤더를 통해, 다른 인증 프로토콜에 맞추어 확장할 수 있는 프레임워크를 제공한다. 아래 그림에 나열된 헤더의 형식과 내용은 인증 프로토콜에 따라 달라진다.
HTTP에는 기본 인증과 다이제스트 인증이라는 두 가지 공식적인 인증 프로토콜이 있다.
기본 인증
기본 인증은 가장 잘 알려진 HTTP 인증 규칙이다. 거의 모든 주요 클라이언트와 서버에 기본 인증이 구현되어 있다.
기본인증에서, 웹 서버는 클라이언트의 요청을 거부하고 유요한 사용자 이름과 비밀번호를 요구할 수 있다. 서버는 200 대신 401 상태 코드와 함께, 클라이언트가 접근하려고 했던 보안 영역을 WWW-Authenticate에 기술해서 응답하여 인증요구를 시작한다. 브라우저는 사용자가 입력한 사용자 이름과 비밀번호를 Authorization 요청 헤더 안에 암호화해서 서버로 다시 보낸다.
Base-64 사용자 이름/비밀번호 인코딩
HTTP 기본 인증은 사용자 이름과 비밀번호 콜른으로 이어서 합치고, base-64 인코딩 메서드를 사용해 인코딩 한다. base-64 인코딩은 8비트 바이트로 이루어져 있는 시퀀스를 6비트 덩어리의 시퀀스로 변환한다. 각 6비트 조각은 대부분 문자와 숫자로 이우어진 특별한 64개의 문자 중에서 선택된다.
아래 그림은 기본 인증에서 base-64 인코딩을 사용하는 예시이다. 사용자 이름은 'brian-totty'이고 비밀번호는 'Ow!'이다. 브라우저는 사용자 이름과 비밀번호를 콜론으로 이어서 'binary-totty:Ow!'를 만든다. 그러고 나서 이 문자열을 base-64로 인코딩해서 길고 복잡한 'YnJpYW4tdG90dHk6T3ch'를 만든다.
Base-64 인코딩은 바이너리, 텍스트, 국제 문자 데이터 문자열 받아서 전송할 수 있게, 그 문자열을 전송 가능한 문자인 알파벳으로 변환하기 위해 발명됐다. 전송 중에 원본 문자열이 변질될 걱정 없이 원격에서 디코딩할 수 있다.