HTTP의 기본 인증
- Coding/HTTP
- 2019. 6. 22.
도입부
많은 사람들이 웹을 통해 개인적인 업무를 보거나 개인적인 데이터에 접근한다. 웹은 이런 편리함을 제공해주지만, 모든 정보나 업무가 공용은 아니기 때문에, 허가된 사람만이 데이터에 접근하고 업무를 처리할 수 있어야한다. 웹 사이트에 있는 개인의 프로필이나 개인이 작성한 문서는 해당 소유자의 동의 없이는 권한 없는 사용자가 볼 수 없어야한다. 그러기 위해서는 서버가 사용자가 누구인지 식별할 수 있어야한다. 서버가 사용자가 누군지 알면, 그 사용자가 어떤 작업이나 리소스에 접근할 수 있는지 결정할 수 있다.
인증이란, 당신이 누구인지 증명하는 것이다. 보통 사용자 이름과 비밀번호를 입력해서 인증한다. HTTP는 자체적인 인증 관련 기능을 제공한다.
HTTP의 인증요구/응답 프레임워크
HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다.
1) 요청 : 클라이언트 -> 서버 Request
2) 인증요구 : 서버 -> 클라이언트 인증 요구 (사용자 이름/비밀번호 전송 요청)
3) 인가 : 클라이언트 -> 서버 인증 정보 전송 및 요청
4) 성공 : 서버 -> 클라이언트 클라이언트의 접근권한 획득 및 요청에 대한 응답 결과 받음
웹 애플리케이션이 HTTP 요청 메시지를 받으면, 서버는 요청을 처리하는 대신에 현재 사용자가 누구인지를 알 수 있게 비밀번호 같이 개인 정보를 요구하는 ‘인증 요구`로 응답할 수 있다. 사용자가 다시 요청을 보낼 때는 인증정보를 함께 전송해야하고, 인증번호가 맞지 않으면 서버는 클라이언트에 다시 인증 요구를 보내거나, 에러를 낼 수 있다. 인증 정보가 맞다면 요청에 대한 처리가 완료되어 응답을 보내준다.
인증 프로토콜과 헤더
HTTP는 필요에 따라 고쳐 쓸 수 있는 제어 헤더를 통해, 다른 인증 프로토콜에 맞추어 확장할 수 있는 프레임워크를 제공한다. 헤더의 형식과 내용은 프로토콜에 따라 달라진다. HTTP에는 기본 인증과 다이제스트 인증이라는 2가지의 인증 프로토콜이 있다.
1) 인증요구 : WWW-Authenticate
서버는 사용자에게 인증 정보를 제공하라는 지시의 의미로 401 Unauthorized 상태 정보와 함께 요청을 반려한다.
2) 인증 : Authorization
클라이언트는 요청을 다시 보내는데 이번에는 인증 알고리즘과 사용자 이름과 비밀번호를 기술한 Authorization 헤더를 함께 보낸다.
3) 성공 : Authentication-Info
인증 정보가 정확하면 서버는 문서와 함께 응답한다.
기본 인증
기본 인증은 가장 잘 알려진 HTTP 인증 규약이다. 기본 인증에서 웹 서버는 클라이언트의 요청을 거부하고 유효한 사용자 이름과 비밀번호를 요구할 수 있다. 서버는 200 대신 401 상태 코드와 함께 클라이언트가 접근하려고 했던 보안 영역을 WWW-Authenticate에 기술해서 응답하여 인증 요구를 시작한다. 인증 정보를 포함하여 요청하라는 응답을 받은 브라우저는 사용자에게 계정과 비밀번호를 입력할 수 있는 대화상자를 연다. 여기서 계정과 비밀번호는 사용자가 해당 영역에 접근 권한이 있는지 검사하는데 사용된다. 브라우저는 사용자가 입력한 사용자 이름과 비밀번호를 Authorization 요청 헤더 안에 암호화해서 서버에 다시 보낸다.
프락시 인증
중개 프락시 서버를 통해 인증할 수도 있다. 어떤 회사는 사용자들이 회사의 서버나 LAN이나 무선 네트워크에 접근하기 전에 프락시 서버를 거치게하여 사용자를 인증한다. 프락시 서버에서 접근 정책을 중앙 관리 할 수 있기 때문에, 회사 리소스 전체에 대해 통합적인 접근 제어를 하기 위해서 프락시 서버를 사용하면 좋다. 프락시 인증은 웹 서버의 인증과 헤더와 상태 코드만 다르고 절차는 같다.
웹서버 | 프락시서버 |
비인증 상태 코드 : 401 | 비인증 상태 코드 : 407 |
WWW-Authenticate | Proxy-Authenticate |
Authorization | Proxy-Authorization |
Authentication-Info | Proxy-Authentication-Info |
'Coding > HTTP' 카테고리의 다른 글
TCP 커넥션 관리 (0) | 2019.06.22 |
---|---|
HTTP 기초개념 알아보기 (0) | 2019.06.22 |
HTTP 메시지 (0) | 2019.06.22 |
URL과 리소스 (0) | 2019.06.22 |
웹 서버(Web Server)의 모든 것 (0) | 2019.06.22 |