본문 바로가기
WIKI 기술 지식 베이스

basic_auth

원문 보기 위키 갱신

출처: Caddy 공식 문서

본문

HTTP Basic 인증을 활성화해서, 사용자 이름과 해시된 비밀번호로 디렉터리와 파일을 보호할 수 있어요.

기본 인증은 일반 HTTP에서는 안전하지 않다는 점을 명심하세요. HTTP Basic 인증으로 무엇을 보호할지 결정할 때는 신중해야 해요.

사용자가 보호된 리소스를 요청하면, 아직 사용자 이름과 비밀번호를 제공하지 않았다면 브라우저가 사용자에게 이를 입력하라고 요청해요. Authorization 헤더에 올바른 자격 증명이 있으면 서버가 리소스에 대한 접근을 허용해요. 헤더가 없거나 자격 증명이 틀리면 서버는 HTTP 401 Unauthorized로 응답해요.

Caddy 설정은 평문 비밀번호를 받지 않아요. 설정에 넣기 전에 반드시 비밀번호를 해시해야 해요. caddy hash-password 명령이 이 작업을 도와줘요.

인증에 성공하면 인증된 사용자 이름을 담은 {http.auth.user.id} 플레이스홀더를 사용할 수 있어요.

v2.8.0 이전에는 이 지시문 이름이 basicauth였는데, 다른 지시문들과의 일관성을 위해 이름이 바뀌었어요.

문법

basic_auth [<matcher>] [<hash_algorithm> [<realm>]] {
	<username> <hashed_password>
	...
}
  • <hash_algorithm> 은 이 설정의 해시에 사용되는 비밀번호 해싱 알고리즘(또는 키 유도 함수)을 지정해요. 옵션으로 argon2id가 있고, 기본값은 bcrypt예요.

  • 은 사용자 정의 영역(realm) 이름이에요.

  • 은 사용자 이름이나 사용자 ID예요.

  • <hashed_password> 는 비밀번호 해시예요.

사용자 이름과 해시된 비밀번호에는 {env.*} 같은 전역 플레이스홀더를 사용할 수 있어요. 이들은 설정이 로드될 때 치환되며, 중괄호 안의 다른 텍스트는 그대로 유지돼요.

예제

example.com에 대한 모든 요청에 인증을 요구하는 예시예요:

example.com {
	basic_auth {
		# Username "Bob", password "hiccup"
		Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG
	}
	respond "Welcome, {http.auth.user.id}" 200
}

/secret/ 안의 파일을 보호해서 Bob만 접근할 수 있게 하는 예시예요(다른 경로는 누구나 볼 수 있어요):

example.com {
	root /srv

	basic_auth /secret/* {
		# Username "Bob", password "hiccup"
		Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG
	}

	file_server
}

argon2id 예시

example.com {
	root /srv

	basic_auth /secret/* argon2id {
		# Username "Bob", password "hiccup"
		Bob $argon2id$v=19$m=47104,t=1,p=1$zJPvVe48N64JUa9MFlVhiw$b5Tznu0PxnA4TciY6qYe2BFPxncF1ePQaeNukHhH1cU
	}

	file_server
}

더 알아보기 (Learn more)