카테고리 없음

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 같은 더 안전한 인증 방식을 고려하는 것이 좋습니다.