Basic 인증 헤더 생성기

사용자 이름과 비밀번호를 입력하면 Authorization: Basic 헤더와 바로 실행할 수 있는 curl 명령이 만들어집니다. 기존 헤더를 붙여넣으면 그 안에 담긴 자격 증명을 확인할 수 있습니다.

Authorization 헤더
curl 명령

기존 헤더 디코딩

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 사용자 이름과 비밀번호를 입력합니다.
  2. 생성된 Authorization 헤더를 복사해 클라이언트에 넣거나, curl 명령으로 요청을 테스트합니다.
  3. 기존 헤더를 확인하려면 기존 헤더 디코딩 영역에 붙여넣습니다. 그러면 사용자 이름과 비밀번호가 표시됩니다.

HTTP Basic 인증의 동작 방식

Basic 인증은 RFC 7617에 정의되어 있습니다. 보호된 리소스에 접근하면 서버는 401 Unauthorized 상태와 WWW-Authenticate: Basic realm="..." 헤더로 응답합니다. 그러면 클라이언트는 사용자 이름과 비밀번호를 콜론으로 연결하고, 그 결과를 Base64로 인코딩해 모든 요청에 함께 보냅니다.

Authorization: Basic base64(username ":" password)

# RFC 7617의 예시: 사용자 "Aladdin", 비밀번호 "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

브라우저는 이 교환 과정을 직접 처리해 로그인 대화 상자를 표시하지만, 스크립트와 API 클라이언트는 보통 서버의 인증 요구(챌린지)를 기다리지 않고 첫 요청부터 헤더를 보냅니다. 두 값은 콜론으로 구분되므로 사용자 이름에는 콜론이 들어갈 수 없지만 비밀번호에는 들어가도 됩니다. 서버는 챌린지에 charset="UTF-8"을 추가해 ASCII가 아닌 자격 증명을 UTF-8로 보내야 한다고 알릴 수 있습니다.

Base64는 암호화가 아닙니다

헤더는 알아볼 수 없게 뒤섞인 것처럼 보이지만, 이 페이지의 디코더나 아무 Base64 디코더로 누구나 몇 초 만에 비밀번호를 복원할 수 있습니다. Basic 인증은 TLS가 전송 중인 헤더를 암호화하는 HTTPS에서만 사용해야 합니다. 다음 사항도 기억해 두십시오.

  • 자격 증명은 모든 요청과 함께 전송되므로 암호화되지 않은 HTTP 요청 한 번만으로도 노출됩니다.
  • 프록시, 로드 밸런서, 디버깅 도구는 따로 설정하지 않으면 Authorization 헤더를 로그에 기록할 수 있습니다.
  • 브라우저는 입력된 자격 증명을 브라우저를 닫을 때까지 기억하며, 로그아웃하는 표준 방법이 없습니다.

공개 API에는 폐기할 수 있는 API 토큰이나 OAuth가 더 적합합니다. Basic 인증은 내부 도구, 스테이징 사이트, TLS를 사용하는 서버 간 호출에는 여전히 합리적인 선택입니다.

코드에서 헤더 보내기

# curl이 헤더를 직접 만듭니다
curl -u 'user:password' https://api.example.com/

// JavaScript fetch(btoa는 Latin-1 문자만 처리)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })

# Python requests
requests.get(url, auth=('user', 'password'))

https://user:password@host/처럼 URL에 자격 증명을 넣는 방식은 피하십시오. RFC 3986은 이 형식을 더 이상 권장하지 않으며, 브라우저 기록과 서버 로그에 그대로 남고, 최신 브라우저는 사용을 제한합니다.

자주 묻는 질문

Basic 인증 헤더는 어떻게 디코딩합니까?

기존 헤더 디코딩 영역에 헤더를 붙여넣으면 사용자 이름과 비밀번호가 바로 표시됩니다. 어떤 Base64 디코더를 사용해도 같은 결과가 나오며, 바로 이 때문에 헤더는 반드시 HTTPS로만 전송해야 합니다.

비밀번호에 콜론을 넣을 수 있습니까?

예. 서버는 디코딩된 값을 첫 번째 콜론에서 나누므로 그 뒤의 모든 문자는 비밀번호에 속합니다. 하지만 사용자 이름에는 콜론이 들어가면 안 됩니다.

HTTP Basic 인증은 안전합니까?

강력하고 고유한 비밀번호를 사용하고 HTTPS로 전송하면 전송 중인 자격 증명은 보호됩니다. 하지만 자격 증명이 모든 요청에 포함되고 토큰처럼 만료되지도 않습니다. 암호화되지 않은 HTTP에서는 절대 사용하지 마십시오.

악센트 부호가 붙은 문자나 한글 같은 비라틴 문자가 포함된 비밀번호로 로그인하지 못하는 이유는 무엇입니까?
클라이언트와 서버가 서로 다른 문자 인코딩을 가정할 수 있기 때문입니다. RFC 7617은 서버가 charset="UTF-8"을 선언할 수 있도록 하고 있습니다. 이 선언이 없으면 오래된 서버는 ISO-8859-1로 간주해 서로 다른 바이트를 비교할 수 있습니다.
내 비밀번호가 어딘가로 전송됩니까?

아니요. 헤더는 브라우저의 JavaScript가 만들며 어떤 데이터도 전송되지 않습니다. 그래도 생성된 curl 명령을 다른 사람과 공유할 때는 테스트용 자격 증명을 사용하십시오.