Categories
Tags
Backtracking Base-64 인코딩 Cache-Control CI-CD Content-negotiation CORS CPU Scheduling Docker GitHub Actions HTTP HTTP 기본 인증 HTTP 완벽 가이드 HTTP2.0 HTTPS HTTP버전 Linux Memory Management Nginx OPTION 메소드 Paging Primality Test proxy Review robots.txt Simulation Spring Boot SSL, TLS TCP 커넥션 TRACE 메소드 UA (User Agent) URL Virtualization (OS) 검색 엔진 국제화 내용 협상 무중단 배포 엔터티와 인코딩 웹 로봇 웹 서버 지속 커넥션 캐시 쿠키 크롤러 클라이언트 식별 트랜스 코딩 프록시
919 words
5 minutes
[HTTP 완벽 가이드] 12. 기본 인증
NOTEHTTP 기본 인증 (Basic Authentication)은 HTTP의
Authentication
헤더에Base-64 인코딩
된 인증 파라미터를 사용한다. 따라서 보안을 위해 추가적인 암호화 기술이 필요하다.
키워드
기본 인증
, Base-64 인코딩
메모 및 핵심 요점
- 인증 : 당신이 누구인지 증명하는 것
- HTTP에는 기본 인증과 다이제스트 인증이라는 두 가지 공식적인 인증 프로토콜이 있다. 현대에 HTTP 인증요구/응답 프로토콜을 사용하는 인증 프로토콜에는 OAuth가 있다. (OAuth는 인증의 흐름 일부에서 HTTP 기본 인증을 사용합니다)
- 기본 인증 Flow 정리
- 서버가 사용자에게
401 Unauthorized
응답과 함께WWW-Authenticate
헤더(어디서 어떻게 인증할지 설명, 사용자가 접근하려던 보안 영역(realm)을 기술함)를 기술하여 사용자에게 인증을 요구한다. - 클라이언트는 서버에게 인증하기 위해 인코딩(base-64 방식을 사용한다)된 비밀번호와 파라미터들을
Authenticate
헤더에 담아서 요청을 보낸다. (사용자 이름과 비밀번호를 콜론으로 이어붙이고 인코딩하여 헤더에 담음) - 인증 요청이 완료되면, 서버는 정상적인 상태 코드를 반환한다.
- 서버가 사용자에게
- 기본 인증 프로토콜의 경우,
Authentication-Info
헤더를 사용하지 않는다. 이 헤더에는 추가적인 인증 알고리즘을 기술한다. - Base-64 인코딩 : 바이너리, 텍스트, 국제 문자 데이터ㅕ 문자열을 받아서 전송할 수 있게, 그 문자열을 전송한 문자열인 알파벳으로 변환하기 위해 발명됨. 국제 문자나 HTTP 헤더에서 사용할 수 없는 문자를 포함한 정보를 보내야 할 때 유용하게 사용할 수 있다.
- 프락시 인증 : 중계 서버를 이용한 인증.
- 기본 인증의 보안 문제
- 기반으로 하는 base-64 인코딩은 디코딩 하기 쉬운 형태임. (base-64로 인코딩된 비밀번호는 사실상 ‘비밀번호 그대로’ 보내는 것과 다름 없다.)
- 클라이언트에서 인코딩하여 보내는 정보를 중간에서 가로채서, 그대로 서버에 보낼 수 있다.
- 클라이언트는 대부분 아이디와 비밀번호를 통일하므로, 하나를 알면 다른 곳에서도 사용할 염려가 있다.
- 가짜 서버의 위장에 취약하다.
- 프락시나 중개자가 중간에 개입할 경우, 정상적인 동작을 보장하지 않는다.
⇒ 이러한 문제 때문에 기본 인증의 경우, 누군가가 의도치 않게 리소스에 접근하는 것을 막거나 (해당 데이터에 접근하는 것 자체를 불편하게 만든다) SSL과 같은 암호 기술과 혼용 하여 사용한다.
인용
그러기 위해서는 서버가 사용자가 누구인지 식별할 수 있어야 한다. 서버가 사용자가 누구인지 알면, 그 사용자가 어떤 작업이나 리소스에 접근할 수 있는 지 결정할 수 있다. 인증은 당신이 누구인지 증명하는 것이다. (321p)
기본 인증은 사용자 이름과 비밀번호를 악의적인 개인들에게 숨기려고 암호화된 데이터 전송(SSL 같은)과 함께 연계해서 사용할 수 있다. 이는 널리 사용하는 기술이다. (330p)
[HTTP 완벽 가이드] 12. 기본 인증
https://punchdrunkard.github.io/posts/book/htttp-guide/http12/