카테고리 없음
11. Basic Authentication 개요
개발자잡
2025. 2. 25. 18:36
1. Basic Authentication 동작 방식
1. 클라이언트가 서버에 요청을 보냄
- 예를 들어, GET /secure-data 요청을 보냈다고 가정합니다.
2. 서버가 인증을 요구함
- 인증이 필요한 경우 서버는 401 Unauthorized 상태 코드와 함께 WWW-Authenticate 헤더를 응답에 포함합니다.
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Access to the secure site"
3. 클라이언트가 인증 정보를 포함하여 재요청
- 사용자 이름과 비밀번호를 :로 연결한 후 Base64로 인코딩하여 Authorization 헤더에 포함해 다시 요청합니다.
GET /secure-data HTTP/1.1
Host: example.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= # (Base64 인코딩된 값)
4. 서버가 인증 후 요청을 처리함
- 서버는 Base64로 디코딩하여 사용자 이름과 비밀번호를 확인한 후, 인증이 성공하면 요청을 정상적으로 처리합니다.
HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Authorized access granted"
}
2. Basic Authentication의 특징
장점
- 구현이 간단하고 별도의 세션 관리가 필요 없음
- 표준 HTTP 인증 방식으로 많은 시스템에서 지원됨
- HTTP(S)를 통해 보안을 강화할 수 있음
단점
- 보안에 취약: Base64 인코딩은 단순한 인코딩일 뿐 암호화가 아니므로 패킷을 가로채면 쉽게 복호화 가능
- 비밀번호 노출 위험: 인증 정보가 요청마다 전송되므로 노출 위험이 큼
- 세션 유지 기능 없음: 클라이언트가 매번 인증 정보를 포함해야 함
3. Basic Authentication을 사용할 때 보안 강화 방법
- HTTPS 사용 필수: 평문 전송을 방지하기 위해 반드시 HTTPS를 사용해야 함
- 비밀번호 저장 금지: 클라이언트 측에서 비밀번호를 저장하지 않도록 유의해야 함
- API Key 또는 JWT 토큰 사용 고려: 보안성이 높은 OAuth, JWT 같은 인증 방식이 더 안전함
4. Spring Boot에서 Basic Authentication 사용하기
Spring Security를 사용하면 Basic Authentication을 쉽게 설정할 수 있습니다.
Spring Boot에서 기본 설정
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeHttpRequests(auth -> auth
.anyRequest().authenticated()
)
.httpBasic(); // Basic Authentication 활성화
return http.build();
}
}
이렇게 설정하면 모든 API 요청에 대해 Basic Authentication이 적용됩니다.
사용자 인증 추가 (InMemory 방식)
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("admin")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
이제 API 요청 시 admin:password를 Base64 인코딩하여 인증하면 접근이 가능합니다.
5. Basic Authentication vs Bearer Token (JWT)
비교 항목 | Basic Authentication | Bearer Token (JWT) |
보안 수준 | 낮음 (Base64 인코딩) | 높음 (서명, 암호화 가능) |
인증 정보 저장 방식 | 요청마다 전송 | 토큰을 저장 후 사용 |
세션 관리 | 없음 (매번 인증 필요) | 있음 (토큰 만료 전까지 유효) |
사용 예시 | 간단한 API, 내부 시스템 | OAuth 2.0, JWT 기반 인증 |
결론
Basic Authentication은 간단한 API 인증을 빠르게 구현할 수 있지만, 보안에 취약하므로 보통 HTTPS와 함께 사용해야 합니다. 보안성이 중요한 애플리케이션에서는 JWT 또는 OAuth 2.0 같은 더 안전한 인증 방식을 고려하는 것이 좋습니다.