시스템에 액세스하는 권한을 가진 본인인지 아닌지를 확인하기 위해서는 '등록된 본인만이 알고 있는 정보' 혹은 '등록한 본인만이 가지고 있는 정보' 등으로 확인할 필요가 있다.
<종류>
HTTP/1.1에서 이용할 수 있는 인증 방식에는 다음과 같은 것이 있다.
HTTP/1.0에 구현된 인증 방식. 현재에도 일부 사용중. 웹 서버와 대응하고 있는 클라이언트 사이에서 이뤄지는 인증방식이다.
리퀘스트 송신 -> 상태 코드 401로 응답(인증이 필요하다 전달) -> 유저ID와 패스워드를 Base64 형식으로 인코드한 것을 송신 -> 인증 성공 시 상태코드 200응답, 실패했을 경우 다시 상태코드 401 응답
BASIC 인증의 약점을 보안하며 HTTP/1.1에 소개되어 있다. 챌린지 리스폰스 방식이 사용. 패스워드를 있는 그대로 직접 보내지 않는다.(BASIC)
리퀘스트 송신 -> 401(인증필요) 전달, 패스워드와 챌린지 코드 송신 -> 패스워드와 챌린지 코드에서 리스폰스 코드를 계산해서 송신 -> 인증 성공시 200, 실패시 401
HTTPS의 클라이언트 인증서를 이용한 인증 방식. 사전에 등록된 클라이언트에서의 액세스인지 아닌지를 확인할 수 있다.
SSL 클라이언트 인증을 할 때에는 사전에 클라이언트에 클라이언트 증명서를 배포하고 인스톨 해둘 필요가 있음.
인증이 필요한 리소스의 리퀘스트가 있었을 경우 -> 클라이언트 증명서를 요구하는 "Certificate Request"메시지 송신 -> 유저는 송신하는 클라이언트 증명서 선택 -> 클라이언트는 "Client Certificate"메시지 송신 -> 서버는 클라이언트 증명서를 검증하여 결과가 정확하다면 클라이언트의 공개키 취득 -> 이후 HTTPS에 의한 암호 개시
HTTP 프로토콜로서 사양이 정의되어 있는 인증 방식은 아님. 클라이언트가 서버 상의 웹 애플리케이션에 자격 정보(Credential)를 송신하여 그 자격 정보의 검증 결과에 따라 인증을 하는 방식. 대부분 사전에 등록해 둔 정보(ID, 메일주소)와 패스워드를 입력하여 검증 결과를 토대로 검증 성공 여부를 결정.
일반적인 방법으로는 쿠키를 사용한다. 서버 측의 웹 애플리케이션 등에 의해 클라이언트가 송신해온 유저 ID와 패스워드가 사전에 등록하고 있는 것과 일치하는지 검증하며 이루어진다.
하지만 HTTP는 스테이트리스이기에 인증에 성공했던 유저라는 상태를 프로토콜 레벨에서 유지 불가.(상태 관리 불가) 세션 관리와 쿠키를 사용하여 상태 관리 기능을 보충