Use Basic authentication

사용자 이름과 비밀번호를 `user:pass` 형태로 base64 인코딩해 보내는 HTTP Basic 인증 레시피입니다.

개요

사용자 이름과 비밀번호를 `user:pass` 형태로 base64 인코딩해 보내는 HTTP Basic 인증 레시피입니다.

코드로 보기

curl -u alice:s3cret https://api.example.com/private

# curl builds the header for you; equivalent to:
# -H 'Authorization: Basic YWxpY2U6czNjcmV0'
const creds = btoa('alice:s3cret'); // base64
const res = await fetch('https://api.example.com/private', {
  headers: { Authorization: `Basic ${creds}` }
});
import requests
from requests.auth import HTTPBasicAuth

res = requests.get('https://api.example.com/private',
                   auth=HTTPBasicAuth('alice', 's3cret'))
# shorthand: auth=('alice', 's3cret')

설명

헤더 값은 `Basic base64(user:pass)`입니다. base64는 암호화가 아니라 단순 인코딩이므로 누구나 되돌릴 수 있습니다. 따라서 Basic 인증은 반드시 HTTPS 위에서만 사용해야 하며, 평문 HTTP에서는 자격증명이 그대로 노출됩니다.

curl의 `-u user:pass`는 헤더를 자동 생성해 줍니다. 명령줄에 비밀번호를 직접 쓰면 셸 히스토리·프로세스 목록에 남으니, `-u user`만 주고 프롬프트로 입력받거나 `.netrc`를 쓰는 편이 안전합니다. 브라우저 `btoa`는 라틴1만 지원하므로 유니코드 문자가 있으면 UTF-8로 먼저 인코딩해야 합니다.

인증에 실패하면 401과 함께 `WWW-Authenticate: Basic realm="..."` 헤더가 오고, 브라우저는 이를 보고 로그인 팝업을 띄웁니다. 매 요청마다 자격증명을 보내야 하는 무상태 방식이라, 가능하면 토큰 기반(Bearer) 인증을 권장합니다.

관련 헤더

관련 상태코드