개발 일지/Spring

[Spring MVC] Spring Security

미숫가루설탕많이 2023. 3. 17. 10:36

 Spring Security는 Spring MVC 기반 애플리케이션의 인증(Authentication)과 인가(Authorization) 기능을 지원하는 보안 프레임워크이다. Spring Security는 다양한 보안 기능을 제공하며, 사용자 인증, 접근 제어, 보안 이벤트 관리 등을 처리할 수 있다.

 

 보안이라는 주제 자체가 소프트웨어 세계에서 어려운 주제 중 하나이기 때문에 직접 보안 강화를 위한 솔루션을 개발해서 구축하는 것은 쉽지 않을 것이다. 따라서, 잘 검증되어 신뢰할만한 Spring Security를 사용하는 것이 어쩌면 현명한 선택이라고 생각된다.

 

 Spring Security는 다양한 애플리케이션에서, 스프링 프레임워크의 다양한 모듈과 통합하여 사용할 수 있고 개발자가 보안 관련 기능을 쉽게 구현할 수 있도록 도와준다.

 

 Spring Security 외에도 Apache Shiro나 OACC 같은 Java 애플리케이션을 위한 보안 프레임워크가 존재하지만 Spring Security는 다른 보안 프레임워크가 제공하는 기능들을 모두 지원하고 있으며, 지원하는 기본 옵션을 통해 대부분의 보안 요구 사항을 만족시킬 수 있다. 또한 Spring Security에서 제공하는 기본 옵션으로 만족시킬 수 없는 특정 보안 요구사항이 있을 경우, 이러한 요구 사항을 만족시키기 위한 코드의 커스터마이징이 용이하고 유연한 확장이 가능하다.

 

 

 

 

주요 기능

 

  • 사용자 인증 및 권한 부여
    : 사용자 이름과 비밀번호를 사용한 폼 기반 인증, 토큰 기반 인증, OAuth 인증 등 사용자 인증 및 권한 부여를 위한 다양한 인증 방식을 지원한다.

  • 접근 제어
    : URL 기반 접근 제어, 메서드 기반 접근 제어, 표현식 기반 접근 제어 등 접근 제어를 위한 다양한 기능을 제공한다.

  • 보안 이벤트 관리
    : 로그인 실패, 로그인 성공, 인증 실패 등 다양한 이벤트를 처리할 수 있다.
  • 세션 관리
    : 세션 유효성 검사, 세션 고정 방지, 세션 타임 아웃 설정 등 세션 관리를 위한 다양한 기능을 제공한다.

 

 

 

 

용어

 

  • Principal(주체)
    : 인증된 사용자를 나타내는 객체이다. 일반적으로 인증 프로세스가 성공적으로 수행된 사용자의 계정 정보를 의미한다.

  • Authentication(인증)
    : 인증에 사용되는 객체이다. 애플리케이션을 사용하는 본인이 맞음을 증명하는 절차이다. Authentication을 정상적으로 수행하기 위해서는 사용자를 식별하기 위한 정보가 필요한데 이를 Credential(신원 증명 정보)이라고 한다.

  • Authorization(인가 또는 권한 부여)
    : 인증된 사용자에게 특정 리소스에 대한 접근 권한을 부여하며, 권한은 롤(Role)이나 권한(Authority)의 형태로 정의된다. Authorization은 반드시 Authentication 과정 이후에 수행되어야 한다.

  • Access Control(접근 제어)
    : 사용자가 애플리케이션의 리소스에 접근하는 행위를 제어하는 것을 의미한다.

  • Filter(필터)
    : HTTP 요청을 처리하기 전후에 실행되는 객체이다. 인증, 인가, 보안 등 다양한 작업을 처리할 수 있다.

  • Provider
    : 인증에 사용되는 객체를 제공하는 인터페이스이다. AuthenticationManager를 통해 인증 요청을 처리하며, 인증 정보를 검증하는 역할을 한다.

  • Session
    : 인증된 사용자의 상태 정보를 저장하는 객체이다. 사용자가 인증된 이후부터 로그아웃할 때까지 유지되며, 인증 정보와 사용자 상태 정보를 포함한다.