Effective-Java-Camp / http-the-definitive-guide

[DONE] HTTP 완벽 가이드 스터디 레포지토리
0 stars 0 forks source link

[3부 12장] 기본 인증 #11

Open im-gnar opened 2 years ago

im-gnar commented 2 years ago

12장 기본 인증

12.1 인증

12.1.1 HTTP의 인증요구/응답 프레임워크

웹 사이트에 리소스에는 소유자의 동의 없이 권한 없는 사용자가 접근할 수 없어야 하고, 이를 위해서 서버는 사용자가 누구인지 식별할 수 있어야 한다. 보통은 사용자 이름과 비밀번호를 입력해서 인증한다. HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다. BUT 요즘은 각각의 인증 모듈을 이용해 '직접' 구현해 사용한다.

12.1.2 인증 프로토콜과 헤더

HTTP는 필요에 따라 고쳐 쓸 수 있는 제어 헤더를 통해, 다른 인증 프로토콜에 맞추어 확장할 수 있는 프레임워크를 제공한다. HTTP에는 기본 인증과 다이제스트 인증이라는 두 가지 공식적인 인증 프로토콜이 있다.

기본인증

12.1.3 보안 영역

웹 서버는 기밀문서를 보안 영역(realm) 그룹으로 나누고, 보안 영역은 저마다 다른 사용자 권한을 요구한다.

 HTTP/1.0 401 Unauthorized   
 WWW-Authenticate: Basic realm="Corporate Financials"

12.2 기본 인증

기본 인증은 가장 잘 알려진 HTTP 인증 규약이다.

12.2.1 기본 인증의 예

12.2.2 Base-64 사용자 이름/비밀번호 인코딩

기본 인증은 Authorization: Basic <credentials>형식으로 유저 데이터를 전송하고, credentials는 기본적으로 Base64-Encoded(userid:password)를 따른다.

Base-64는 원래 시스템에 문제를 일으킬 수 있는 문자열(e.g. 한글이 포함된 URL...)을 받아 전송할 수 있도록 하기 위해 만들어졌다.

즉, 암호화의 목적으로 만들어진 게 아니다. 노출을 방지할 수는 있지만, 디코딩하는 것도 매우 간단하기 때문에 이를 보안 목적으로 사용하는 것은 부적절하다.

12.2.3 프락시 인증

중개 프락시 서버를 통해 인증하거나 프락시 서버에서 접근 정책을 중앙 관리할 수 있다.

웹 서버와 프락시 인증에서 쓰이는 상태 코드와 헤더들의 대조

기본 인증 프락시 서버
401 (Unauthorized) 407 (Proxy Authentication Required)
WWW-Authenticate Proxy-Authenticate
Authorization Proxy-Authorization
Authentication-Info Proxy-Authentication-Info

접근 거부 프록시 서버가 주어진 리소스에 대한 접근 권한을 얻기 위해 적절하지 않은 유효한 인증 정보를 수신한다면, 서버는 403 Forbidden 상태 코드로 응답하여야 합니다. 401 Unauthorized407 (en-US) Proxy Authentication Required 와는 다르게, 해당 사용자에 대한 인증은 불가능합니다.

12.3 기본 인증의 보안 결함

종합하자면, 기본인증은 노출이 되어도 치명적이지 않은 경우에는 여전히 유용하다. 또 기본 인증은 암호화된 데이터 전송(SSL과 같은)과 함께 연계해서 사용 가능하다.


++ HTTP Auth Type

WWW-Authenticate 헤더는 Type 에 인증 스킴을 명시한다.

image

Ref. HTTP 인증 Ref. HTTP Authentication Explained

ruthetum commented 2 years ago

cf. 토근 기반 인증에서 bearer는 무엇일까?