반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 소프트웨어
- 컴퓨터과학
- 데이터베이스
- 머신러닝
- 프로그래밍언어
- 알고리즘
- 컴퓨터비전
- 소프트웨어공학
- 사이버보안
- 버전관리
- 웹개발
- Yes
- 네트워크보안
- 데이터과학
- 딥러닝
- 컴퓨터공학
- 프로그래밍
- 보안
- 자바스크립트
- 네트워크
- 데이터분석
- 자료구조
- 파이썬
- 클라우드컴퓨팅
- springboot
- I'm Sorry
- 빅데이터
- 디자인패턴
- 데이터구조
- 인공지능
Archives
- Today
- Total
스택큐힙리스트
인가와 인증 차이 본문
반응형
“인증(Authentication)은 ‘누구냐’를 묻고, 인가(Authorization)는 ‘무엇을 할 수 있느냐’를 답한다.”
이 문장 하나로 두 개념의 핵심을 잡으면, Spring Security 설계 · 디버깅이 훨씬 쉬워집니다. 오늘은 이 두 축을 깔끔히 구분해 보고, 실제 애플리케이션에서 어떻게 흘러가는지도 살펴봅니다.
1. 개념 먼저 정리하기
- 인증: 사용자가 실제로 주장한 신원이 맞는지 증명하는 과정입니다. 로그인, OAuth2 소셜 콜백, API Key 검증 등이 여기 포함됩니다.
- 인가: 이미 인증된 사용자에게 요청 자원에 대한 접근 권한을 부여·거부하는 과정입니다. “관리자만 /admin 접속 가능”, “게시글 작성자는 수정·삭제 가능” 같은 룰이 여기에 해당합니다.
2. 실생활 비유로 감 잡기
- 인증 = 신분증 검사: 건물 로비에서 사원증을 보여 주면 “아, 사내 직원이군요”라고 확인.
- 인가 = 출입 권한 확인: 이후 서버실 통과하려면 사원증의 ‘서버실 접근’ 권한이 있어야 문이 열립니다.
3. Spring Security 흐름 속 위치
- 인증 필터
- UsernamePasswordAuthenticationFilter, BearerTokenAuthenticationFilter 등이 요청 헤더·폼 데이터를 확인해 Authentication 객체를 만듭니다.
- 인가 필터
- FilterSecurityInterceptor가 컨트롤러 진입 직전에 AccessDecisionManager를 호출해 ROLE, 권한 어노테이션(@PreAuthorize 등)을 검사합니다.
둘은 순차적이며 서로 의존하지만, 역할은 분리 되어 있습니다. 인증이 성공해야만 인가 단계로 넘어갈 수 있습니다.
4. 왜 구분이 중요한가?
- 버그 위치를 빠르게 좁힌다
- 401 Unauthorized → 인증 단계 실패.
- 403 Forbidden → 인증은 성공했지만 권한 부족(인가 실패).
- 보안 정책을 모듈화
- 같은 인증 방식을 쓰더라도, 프로젝트별 인가 규칙(RBAC·ABAC)은 달라집니다. 모듈 분리가 유지보수에 필수입니다.
- 테스트 전략이 달라진다
- 인증은 Mock 사용자·Token 생성으로 단위 테스트, 인가는 @WithMockUser·@WithUserDetails로 통합 테스트를 작성합니다.
5. 흔히 하는 실수 & 해결 팁
실수 | 증상 | 해결 실마리 |
인증과 인가 로직을 한 필터에 섞음 | 코드가 비대·테스트 어려움 | 단일 책임 원칙 지키기 |
모든 유저에게 ROLE_USER만 부여 | 세분화된 권한 관리 불가 | 역할·자원 매트릭스를 문서화 |
401과 403 응답을 혼동 | 클라이언트 오류 처리 꼬임 | ExceptionTranslationFilter 커스터마이징 |
팁: 개발 중엔 `spring.security.filter.debug=true` 로 DebugFilter를 켠 뒤, “인증→인가” 로그 흐름을 눈으로 확인하면 훈련이 빨라집니다.
6. 한눈에 보는 체크리스트
- ☐ 인증 성공 후 SecurityContextHolder 에 Authentication 저장되는지
- ☐ 인가 애너테이션(@PreAuthorize 등) 이 정상 적용되는지
- ☐ 401/403 로그가 어떤 필터·Voter에서 발생했는지
- ☐ 토큰·세션 탈취 대비 HTTPS, SameSite, HttpOnly 설정이 있는지
반응형
'개발' 카테고리의 다른 글
Spring 캐시 추상화 × Flyweight 패턴: 메모리 폭주 0% 만드는 공식 (2) | 2025.07.19 |
---|---|
Flyweight 패턴: 객체 수백만 개도 ‘가벼운’ 메모리로 돌리는 비결 (0) | 2025.07.19 |
Spring Security DebugFilter로 보는 실시간 권한 체크 (0) | 2025.07.19 |
Spring Security Filter Chain 깊게 파보기 — 인증 vs 인가 (0) | 2025.07.19 |
자바 스프링 개발 시작하기 - 12일차 로그인·회원가입·토큰 재발급 플로우 (1) | 2025.07.19 |
Comments