kkokkio - 프로젝트/트러블슈팅

SecurityConfig 엔드포인트 권한 설정

파란배개 2025. 6. 16. 09:30

문제 개요

오류 상황과 영향 범위 (예: 특정 코드 실행 시 발생, 특정 라이브러리 버전 호환 문제 등) 발생 배경 (예: 코드 테스트 중, 배포 중 문제 발견 등)

  • 문제 배경
    • 인증이 필요 없는 경로를 모두 공개함으로 보안 취약점 이슈 발생
    • 엔드포인트 권한 설정에 대한 지식 부족
  • 발생 배경
    • 초기에는 “로그인, 회원가입”과 Swagger, H2 콘솔 같은 경로만 공개하고자 함.
    • Role → USER, ADMIN, BlACK에 따라 권한 부여 필요

오류 메시지 및 원인 분석

오류 코드, 오류 메시지 포함 HTTP 상태 코드, 애플리케이션 로그, 서버 로그 등 구체적인 오류 정보 정리 및 로그 메시지를 통한 분석 제공 문제 발생 원인에 대한 심층 분석

  • 오류 메세지
    • 모든 API 요청이 인증 없이 통과
    • 보통 로그에 별도 예외는 남지 않으나, 개발용 테스트 시 모든 엔드포인트가 permitAll()로 처리되어 인증 절차가 전혀 동작하지 않음
    • 결과적으로 .anyRequest().hasAnyRole("USER","ADMIN") 까지 도달하지 못함
  • 원인 분석
    • 엔드포인트 설정에 대한 지식 부족으로 인해 잘못 설정을 진행함.

해결 및 고민 과정

처음 문제를 접했을 때 고려했던 대안들과 선택하지 않은 이유 실험적으로 적용한 방법이 실패한 사례와 그 이유 여러 해결책 중 최적의 방안을 선택한 과정

  • 고민했던 대안들
    • get, post http 기준으로 List<String>으로 엔드 포인트를 담아 permitAll() 설정을 좀 더 편리하게 진행하고자함
    • 모든 엔드포인트를 전부 관리하고자 하였으나 너무 많은 엔드포인트를 입력해야하게 됨
    • 따라서 반대로 권한이 필요한 엔드포인트만 관리하는 방식으로 변경

최종 해결책 및 구현

문제 해결을 위한 단계별 조치 방법과 코드 예시 (예: 특정 애노테이션 추가, 라이브러리 버전 조정, 설정 변경 등) 참고 자료 (관련 공식 문서, 개발자 커뮤니티 게시물 등)

결과 및 성능 분석

개선 후 응답 속도, DB 부하 감소 수치 등 구체적인 데이터 포함 문제 해결 전/후 성능 비교 그래프나 로그 분석 내용 포함 이슈 트래킹 및 자동화 방안 추가 (내부 개발자가 반복적인 문제 해결을 효율적으로 관리할 수 있도록 가이드 제공)

// 엔드포인트별 권한 설정
			.authorizeHttpRequests(authorize ->
				authorize
					// 모든 HTTP 메소드에 대해 인증 없이 접근 가능한 경로
					.requestMatchers(getPublicEndpoints().toArray(String[]::new)
					).permitAll()

					// 댓글 GET 요청 허용
					.requestMatchers(HttpMethod.GET, "/api/v1/posts/*/comments")
					.permitAll()

					// 회원 권한
					.requestMatchers(getPubliCUserEndpoints().toArray(String[]::new))
					.hasRole("USER")
					
					// 관리자 권한
					.requestMatchers(getPublicAdminEndpoints().toArray(String[]::new))
					.hasRole("ADMIN")

					// 그 외 모든 요청 허용
					.anyRequest().permitAll()
			);
  • 범용 공개→ GET 공개 → USER → ADMIN → 그 외 인증
  • 해당 순서대로 요청 허용하도록 작성

추가 개선점

유사한 문제를 방지하기 위한 주의할 점 (예: 애노테이션 명시 여부, 프레임워크 업데이트 주기 확인 등) 문제 해결 과정에서 배운 점 및 중요한 교훈 공유 보안 고려 사항 추가 (해결 과정에서 발생할 수 있는 보안 리스크 및 예방 조치 포함)