1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (186)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (26)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

[Spring Security] 스프링 시큐리티 주요 아키텍쳐 3 - 인가(Authorization)
🌱 SPRING

[Spring Security] 스프링 시큐리티 주요 아키텍쳐 3 - 인가(Authorization)

2021. 12. 16. 01:17

이번 포스팅은 인가에 대해 정리해보았습니다. 인가는 스프링 시큐리티에서 요청을 심사하는데 마지막 관문입니다.

만약 스프링 시큐리티의 인증 아키텍쳐/프로세스에 대해 모르신다면, 앞선 포스팅을 먼저 보고 오시면 더 좋습니다.

 

[Spring Security] 스프링 시큐리티 주요 아키텍쳐 2 - 인증(Authentication)

Spring Security에서는 인증과 인가를 구분해 처리해주고 있는데요, 이번 포스팅에서는 인증 관련 아키텍쳐를 알아보도록하겠습니다. 처음 접하시는 분이라면 인증과 인가가 무엇인지, 어떤 차이가

logical-code.tistory.com

 

 

 

인가 (Authorization)


출처 : 인프런 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security

스프링 시큐리티가 지원하는 권한 계층

  • 웹 계층 : URL 요청에 따른 메뉴 혹은 화면 단위의 레벨 보안
  • 서비스 계층 : 화면 단위가 아닌 메소드 같은 기능 단위의 레벨 보안
  • 도메인 계층 : 객체 단위의 레벨 보안

 

 

 

인가 프로세스


  1. 요청 시 앞선 FilterChainProxy 에서 인증 처리가 완료되고, FilterSecurityInterceptor 로 전달됩니다.
  2. 만약, 인증 객체 없이 보호된 자원에 접근을 시도하게 되면 AuthenticationException 을 throw 합니다.
  3. 인증 객체가 존재할 때 SecurityMetadataSource 로부터 접근하려는 자원이 필요로하는 권한 정보를 조회합니다.
    이 때, 필요로하는 권한 정보가 없다면 자원으로의 접근을 허용합니다.
  4. 필요로하는 권한 정보가 존재한다면 AccessDecisionManager 는 AccessDecisionVoter 들에게 심의 요청을 하고, 결과를 집계합니다.
  5. 접근 결정 전략에 따라 접근을 승인할 지 여부가 결정되고, 접근이 거부되면 AccessDeniedException 을 throw 합니다.
    접근이 승인되면 자원으로의 접근을 허용합니다.

 

 

AccessDecisionManager

  • 인증 정보, 요청 정보, 권한 정보를 이용해서 사용자의 자원 접근을 허용할 지 여부를 결정합니다.
  • 여러 개의 Voter 들을 가질 수 있으며, Voter 들로부터 접근 허용/거부/보류를 리턴받고 집계해 최종 결정을 합니다.
  • 최종 접근 거부 시 AccessDeniedException 이 발생합니다.

 

접근 결정 유형

  • AffirmativeBased
    • 여러개의 Voter 클래스 중 하나라도 접근 허가로 결론을 내면 접근 허가
  • ConsensusBased
    • 다수결에 의해 최종 결정
    • 동률일 경우 기본적으로 접근 허가
    • allowIfEqualGrantedDeniedDecisions 를 false 로 설정할 경우 동률이더라도 접근 거부
  • UnanimousBased
    • 모든 Voter 가 만장일치로 승인해야 접근 허가

 

 

AccessDecisionVoter

  • 권한 부여 과정에서 판단하는 데이터
    • 인증 정보 (Authentication)
    • 요청 정보 (FilterInvocation) : antMatcher("/user/1")
    • 권한 정보 (ConfigAttributes) : hasRole("USER")
  • 결정 방식
    • ACCESS_GRANTED : 접근 허용
    • ACCESS_DENIED : 접근 거부
    • ACCESS_ABSTAIN : 접근 보류

 

 

 

Reference


 

 

스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의

초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과

www.inflearn.com

반응형
저작자표시 비영리 변경금지 (새창열림)

'🌱 SPRING' 카테고리의 다른 글

[Spring Security] 스프링 시큐리티 주요 아키텍쳐 2 - 인증(Authentication)  (0) 2021.12.10
[Spring Security] 스프링 시큐리티 주요 아키텍쳐 1 - DelegatingFilterProxy, FilterChainProxy  (0) 2021.12.06
[Spring Cloud Config] 설정값을 외부에서 관리하자! - 실습  (4) 2021.10.10
[Spring Cloud Config] 설정값을 외부에서 관리하자! - 기본  (0) 2021.10.10
[SpringCloud] Resilience4j와 Spring Cloud Circuit Breaker  (0) 2021.05.16
    '🌱 SPRING' 카테고리의 다른 글
    • [Spring Security] 스프링 시큐리티 주요 아키텍쳐 2 - 인증(Authentication)
    • [Spring Security] 스프링 시큐리티 주요 아키텍쳐 1 - DelegatingFilterProxy, FilterChainProxy
    • [Spring Cloud Config] 설정값을 외부에서 관리하자! - 실습
    • [Spring Cloud Config] 설정값을 외부에서 관리하자! - 기본
    1HOON
    1HOON

    티스토리툴바