Skip to content

Latest commit

 

History

History
95 lines (58 loc) · 3.03 KB

Spring Security.md

File metadata and controls

95 lines (58 loc) · 3.03 KB

Spring Security

스프링 기반의 어플리케이션의 보안(인증과 권한)을 담당하는 프레임워크

만약 시큐리티를 사용하지 않았다면 자체적으로 세션 체크와, redirect를 해야했을 것
Spring Security는 filter 기반으로 동작하기 때문에 spring MVC와 분리되어 관리 및 동작

보안용어

  • 접근 주체 : 보호된 대상에 접근하는 유저

  • 인증 : 현재 유저가 누구인지 확인 ex) 로그인
    애플리케이션의 작업을 수행할 수 있는 주체임을 증명

  • 권한 : 인증된 주체가 애플리케이션의 동작을 실행 할 수 있는 권한이 있는지 확인

    • 권한 승인이 필요한 부분으로 접근하려면 인증 과정을 통해 주체가 증명되어야만 한다
    • 권한 부여에도 두가지 영역이 존재
    1. 웹 요청 권한
    2. 메소드 호출 및 도메인 인스턴스에 대한 접근 권한부여

@EnableWebSecurity

HttpSecurity

Method Security

서비스계층의 메소드에 보안을 추가할 수 있도록 지원
메소드에 @Secured 어노테이션을 추가하면 해당 메소드에 대한 액세스가 제한
역할 단위로 제약조건 지정 가능

AntPathRequestMatcher

시큐리티에서 원하는 url로 보내기 위한 객체

UserDetails

security에서 사용자의 정보를 담는 인터페이스

이를 통해서 Security 인증, 인가에서 직접 구현한 인터페이스 기준으로 작업할 수 있다 .
표준으로 User라는 클래스가 준비되어 있음
User 클래스을 변경해야 하는 경우는 UserDetails 인터페이스를 구현한 클래스를 만들면 된다.

UserDetailsService

DB에서 유저 정보 가져오는 역할

스프링 시큐리티와 보안 3요소의 매칭

접근주체 ⇒ Authentication

인증 ⇒ Authentication Manager

인가 ⇒ Security Interceptor

Authentication과 SecurityContext

Authentication의 용도

  • 현재 접근 주체 정보를 담는 목적
  • 인증 요청할 때, 요청 정보를 담는 목적

SecurityContext

  • Authentication을 보관
  • 스프링 시큐리티는 현재 사용자에 대한 Authentication객체를 구할 때 SecurityContext로 부터 구한다

SecurityContextHolder

SecurityContext 보관

Authentication의 주요 메서드

String getName() 사용자의 이름

Object getCredential() 증명 값 (비밀번호 등)

Object getPrincipal() 인증 주체 정보

boolean isAuthenticated() 인증되었는지 여부

Collection getAuthorities() 현재 사용자가 가진 권한

AuthenticationManager

인증을 처리함

인증 성공하면 Authentication 객체 리턴

(Abstract) SecurityInterceptor

인가 처리

  • 웹의 경우 FilterSecurityInterceptor 구현 사용
  • AccessDecisionManager에 권한 검사 위임

참고
https://sjh836.tistory.com/165
https://victorydntmd.tistory.com/328
https://velog.io/@hellas4/2019-11-12-0811-작성됨