파일 업로드
  1. base64hub
  2. 웹·토큰 도구
  3. Basic Auth 헤더

Basic Auth 헤더 생성기

사용자 이름과 비밀번호를 입력하면 Authorization: Basic …과 함께 curl, fetch, Node.js, Python, PHP에서 바로 실행할 수 있는 코드가 나옵니다. Basic 인증을 깨뜨리는 문자가 있으면 경고합니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 코드 예시 curl, fetch, Node.js, Python, PHP 업데이트 2026. 10. 27.
HTTP 헤더

바로 쓰는 코드

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

Basic Auth 헤더를 생성하는 방법

  1. 사용자 이름과 비밀번호를 입력하세요.
  2. 서버가 ISO-8859-1(Latin-1)을 기대하는 오래된 서버가 아니라면 문자 인코딩은 UTF-8로 두세요.
  3. Authorization: Basic … 줄 전체는 헤더 복사로, Base64 부분만은 토큰만 복사로 복사하세요.
  4. 바로 쓰는 코드 아래의 URL에 엔드포인트를 넣고 사용하는 클라이언트의 코드를 복사하세요. 바꾸기를 누르면 헤더를 디코더로 보내 다시 확인할 수 있습니다.

헤더에 담기는 것

Basic 인증은 RFC 7617에 정의되어 있습니다. 클라이언트는 두 값을 콜론으로 잇고, 그 바이트를 Base64로 인코딩해 헤더 하나에 담아 보냅니다.

사용자 이름비밀번호헤더 값
Aladdinopen sesameBasic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
deployhunter2Basic ZGVwbG95Omh1bnRlcjI=
josépässwördBasic am9zw6k6cMOkc3N3w7ZyZA== (UTF-8)
josépässwördBasic am9z6Tpw5HNzd/ZyZA== (Latin-1)

마지막 두 행은 문자 인코딩이 왜 중요한지 보여 줍니다. 같은 텍스트가 다른 바이트를 만들기 때문에, 다른 인코딩을 기대하는 서버는 틀린 비밀번호를 받게 됩니다. UTF-8을 원하는 서버는 챌린지에서 WWW-Authenticate: Basic realm="api", charset="UTF-8"처럼 알릴 수 있습니다.

여기서 Base64는 전송 형식일 뿐입니다. 헤더를 복사한 사람은 누구나 Basic Auth 디코더로 비밀번호를 되돌릴 수 있으며, 그래서 Basic 인증은 HTTPS에서만 써야 합니다. 자세한 내용은 Base64는 암호화가 아닙니다에서 다룹니다.

도구가 경고하는 문자

  • 사용자 이름 속 콜론. RFC 7617이 금지합니다. 서버가 첫 번째 콜론에서 나누므로 사용자 이름 일부가 비밀번호로 들어가 버립니다.
  • 제어 문자: 탭이나 줄 바꿈 같은 문자는 Basic 자격 증명에 쓸 수 없습니다.
  • Latin-1에 없는 문자: 그 문자 인코딩을 선택했을 때 이모지나 한글 같은 문자는 ?로 바뀌며, 이는 결코 원하는 결과가 아닙니다.
  • UTF-8의 비 ASCII 문자. RFC상으로는 올바르지만 레거시 서버는 다르게 읽을 수 있으므로 먼저 테스트하세요.

비밀번호 속 콜론은 허용됩니다. 두 값을 나누는 것은 첫 번째 콜론뿐이기 때문입니다.

코드에서 Basic 인증 보내기

도구의 코드 예시는 입력한 값으로 생성되며 언어마다 안전하게 따옴표 처리됩니다. 기본 형태는 다음과 같습니다.

curl -u 'deploy:hunter2' https://api.example.com/
import requests

r = requests.get("https://api.example.com/",
                 auth=("deploy".encode("utf-8"), "hunter2".encode("utf-8")))

Python 예시는 일부러 바이트를 넘깁니다. requests는 str 값을 받으면 Latin-1로 인코딩하므로 €나 ł이 든 비밀번호는 실패합니다. 바이트를 넘기면 선택한 UTF-8을 정확히 그대로 보냅니다.

브라우저 JavaScript에서는 헤더를 직접 만드세요. fetch는 user:pass@가 들어간 URL을 거부하고, btoa()는 Latin-1 밖의 문자에서 예외를 던지므로 문자열을 UTF-8 바이트로 인코딩한 뒤 Base64로 바꿔야 합니다. 생성된 fetch 코드는 완성된 토큰을 넣어 두 문제를 모두 피합니다. UTF-8 단계는 JavaScript Base64 가이드에서, Buffer 버전은 Node.js에서 설명합니다.

그래도 요청이 401을 돌려줄 때

먼저 응답의 WWW-Authenticate 헤더를 확인하세요. Bearer라고 되어 있으면 API가 토큰을 기대하는 것이므로 Basic 자격 증명은 절대 받아들이지 않습니다. Basic이라고 되어 있으면 실제로 보낸 헤더(curl -v에서는 > Authorization: Basic …으로 출력됨)를 디코딩해 예상한 값과 비교하세요. 비밀번호 관리자에서 복사하면서 딸려 온 공백이나 끝의 줄 바꿈이 흔한 원인입니다. 프록시는 같은 형식의 별도 헤더 Proxy-Authorization을 씁니다.

자주 묻는 질문

Basic 인증 헤더는 어떻게 만들어지나요?

사용자 이름과 비밀번호를 콜론으로 잇고, 그 문자열을 UTF-8 바이트로 인코딩한 다음 바이트를 Base64로 인코딩하고 앞에 Basic 을 붙입니다. Aladdin과 open sesame은 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==가 됩니다.

Basic 인증은 안전한가요?

HTTPS를 쓸 때만 안전합니다. Base64는 아무것도 숨기지 않으므로 요청을 볼 수 있는 사람은 누구나 순식간에 비밀번호를 디코딩할 수 있습니다. TLS 위에서는 헤더도 요청의 나머지 부분과 함께 암호화됩니다.

비밀번호에 콜론이 들어가도 되나요?

됩니다. 서버는 첫 번째 콜론에서 나누므로 그 뒤의 모든 것은 비밀번호에 속합니다. 콜론이 들어가면 안 되는 쪽은 사용자 이름입니다.

비 ASCII 비밀번호가 일부 서버에서 실패하는 이유는 무엇인가요?

RFC 7617은 서버가 UTF-8을 요구할 수 있게 하지만, 오래된 서버는 헤더를 ISO-8859-1로 디코딩합니다. test:123£는 UTF-8로 dGVzdDoxMjPCow==, Latin-1로 dGVzdDoxMjOj입니다. 다른 문자 인코딩을 시도하거나 ASCII만 쓰세요.