HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다.
웹 애플리케이션이 HTTP 요청 메시지를 받으면, 서버는 요청을 처리하는 대신에 현재 사용자가
누구인지를 알 수 있게 비밀번호 같이 개인 정보를 요구하는 '인증 요구'로 응답할 수 있다.
사용자가 다시 요청을 보낼 때는 인증 정보(사용자 이름/비밀번호)를 첨부해야한다.
인증 정보가 맞지않다면 서버는 재인증요구를 보내거나 에러를 보낼 수 있다.
HTTP에는 기본 인증과 다이제스트 인증이라는 두 가지 공식적인 인증 프로토콜이 있다.
현대에 HTTP의 인증요구/응답 프로토콜을 사용하는 인증 프로토콜로는 OAuth가 있다.
아래는 기본 인증에 대해 설명한다.
단계 | 헤더 | 설명 | 메서드/상태 |
---|---|---|---|
요청 | 첫 번째 요청에는 인증 정보가 없다. | GET | |
인증요구 | WWW-Authenticate | 서버는 사용자에게 이름과 비밀번호를 제공하라는 의미로 401 상태 정보와 함께 요청을 반려한다. | 401 Unauthorized |
인증 | Authorization | 클라이언트는 요청을 다시 보내는데, 이번에는 인증 알고리즘과 사용자 이름, 비밀번호를 기술한 Authorization 헤더를 함께 보낸다. | GET |
성공 | Authentication-Info | 인증 정보가 정확하면, 서버는 문서와 함께 응답한다. 어떤 인증 알고리즘은 선택적인 헤더인 Authentication-Info에 인증 세션에 관한 추가 정보를 기술해서 응답하기도 한다. | 200 OK |
웹 서버는 기밀문서를 보안 영역(realm) 그룹으로 나눈다. 보안 영역은 저마다 다른 사용자 권한을 요구한다.
WWW-Authenticate: Basic realm="Corporate Financials"
realme은 Corporate Financials(회사 재무) 같이 해설형식으로 돼 있어서, 사용자 이름과
비밀번호를 가지고 있는 사용자가 권한의 범위를 이해하는 데 도움이 되어야 한다.
인증요구/응답 | 헤더 문법과 설명 |
---|---|
인증요구(서버 -> 클라이언트) | 각 사이트는 보안 영역마다 다른 비밀번호가 있을것이다. realm은 요청받은 문서 집합의 이름을 따옴표로 감싼 것으로, 사용자는 이 정보를 보고 어떤 비밀번호를 사용해야 하는지 알 수 있다. |
응답(클라이언트 -> 서버) | 사용자 이름과 비밀번호는 콜론으로 잇고, base-64로 인코딩해서 사용자 이름과 비밀번호에 쉽게 국제문자를 포함할 수 있게 하고, 네트워크 트래픽에 사용자 이름과 비밀번호가 노출되지 않게 한다. |
기본 인증 프로토콜은 12.1.2의 표에서 봤던 Authentication-Info 헤더를 사용하지 않는다.
기본 인증에서 base-64로 인코딩을 사용하는 예를 보여준다.
(a) 사용자 이름과 비밀번호를 입력받는다.
name : brian-totty pw: Ow!
(b) 사용자 이름과 비밀번호를 콜론으로 잇는다.
brian-totty:Ow!
(c) Base 64 인코딩한다.
YnJpYW4tdG90dHk6T3ch
(d) 인가 요청을 보낸다.
GET /family/jeff.jpg HTTP/1.0 Authorization: Basic YnJpYW4tdG90dHk6T3ch
base-64 인코딩은 바이너리, 텍스트, 국제 문자 데이터 문자열을 받아서 전송할 수 있게, 그 문자열을 전송 가능한
문자인 알파벳으로 변환하기 위해 발명됐다.
어떤 회사는 사용자들이 회사의 서버나 LAN 또는 무선 네트워크에 접근하기 전에 프락시 서버를 거치게 하여 사용자를 인증한다.
이 절차의 첫 번째 단계는 프락시 인증으로 사용자를 식별하는 것이다.
프락시 인증은 웹 서버의 인증과 헤더와 상태 코드만 다르고 절차는 같다.
아래의 표는 웹 서버와 프락시 인증에서 쓰이는 상태 코드와 헤더들의 대조표다.
웹 서버 | 프락시 서버 |
---|---|
비인증 상태 코드 : 401 | 비인증 상태 코드 : 407 |
WWW-Authenticate | Proxy-Authenticate |
Authorization | Proxy-Authorization |
Authentication-Info | Proxy-Authentication-Info |
기본 인증은 위의 보안 결함들로 인해, 호기심 많은 사용자가 우연이나 사고로 정보에 접근해서 보는 것을 예방하는 정도로 사용한다.
기본 인증
은 사용자 이름과 비밀번호를 악의적인 개인들에게 숨기려고 암호화된 데이터 전송(SSL과 같은)
과 함께
연계해서 사용할 수 있다. 이는 널리 사용하는 기술이다.