본문 바로가기

spring security

기본 인증 - httpBasic()

정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!

 

 

 

HTTP Basic 인증
  • HTTP는 엑세스 제어와 인증을 위한 프레임워크를 제공, 가장 일반적인 인증 방식은 "Basic" 인증 방식
  • 인증 프로토콜은 HTTP 인증 헤더에 기술되어 있음

 

Client

↓    GET   /home

인증되지 않은 상태)

서버 → 클라이언트
401 Unauthorized
WWW-Authenticate: Basic realm="localhost"

서버는 클라이언트에게 인증 요구를 보냄
401 Unauthorized 응답
WWW-Authenticate 헤더 ≫ realm(보안영역)과 Basic 인증 방법 포함

username, password 입력 후 다시 요청

클라이언트 → 서버
GET   /home
Authorization: Basic YWxpY2U6cGFzc3dvcmQ

Base64로 username과 password를 인코딩하고, Authorization 헤더에 담아 서버로 전송

성공적으로 완료되면 정상 상태 코드 반환

서버 → 클라이언트
200 OK

 


** 주의 사항

  • base-64로 인코딩된 값은 디코딩이 가능함 ≫ 인증정보 노출 !
  • 따라서 HTTP Basic 인증은 반드시 HTTPS와 같이 SSH, TLS 기술과 함께 사용해야 함

 

httpBasic() API
  • HttpBasicConfigurer 설정 클래스를 통해 여러 API 들을 설정할 수 있음
  • BasicAuthenticationFilter : 인증 처리를 위한 필터, 내부적으로 생성되어 기본 인증 방식의 인증 처리를 담당

  • realmName : HTTP 기본 영역을 설정
  • authenticationEntryPoint : 인증 실패 시 호출됨
    • 기본값은 "Realm" 영역으로 BasicAuthenticationEntryPoint가 사용됨
  • BasicAuthenticationEntryPoint따로 설정하지 않아도 기본값으로 잘 동작함
    → 인증 실패 시 WWW-Authenticate 헤더를 포함해서 보내도록 하여 인증 요구
  • db 저장 등 특별한 로직 구현 필요 없다면 customEntryPoint 굳이 설정하지 않아도 됨

 

동작 과정

 

1. Customizer.withDefaults() 로 기본값으로 설정

 

2. 클라이언트에서 서버 요청 → localhost:8080 접속

 

3. 

  • 401 Unauthorized 응답
  • header에 WWW-Authenticate: Basic realm="Realm" 전달 → 헤더값을 통해 인증 요구를 파악 후 로그인 창을 띄움

4. 올바른 username, password 입력 후 로그인

 

5.

  • 서버에서 인증 처리 후 200 OK 응답
  • WWW-Authenticate 헤더는 사라짐