스프링 시큐리티 기본 설명
- Spring Security Core:
- Spring Security는 애플리케이션 보안을 구현하기 위한 강력한 프레임워크로, Java 기반 웹 및 애플리케이션 보안을 다룹니다.
- Spring Security Core는 Spring Framework의 일부로, 인증(authentication)과 권한 부여(authorization)를 다루는 핵심 라이브러리를 포함하고 있습니다.
- 인증은 사용자가 시스템에 대한 자신의 신원을 증명하는 과정이며, 권한 부여는 사용자에게 특정 자원이나 기능에 대한 액세스 권한을 부여하는 과정입니다.
- OAuth 2.0 Client:
- OAuth 2.0는 인증 및 권한 부여 프로토콜로, 외부 서비스와의 안전한 인증 및 자원 공유를 지원합니다.
- Spring Security OAuth2 Client 모듈은 OAuth 2.0 프로토콜을 사용하여 외부 인증 서버(예: Google, Facebook)와 통합할 수 있도록 도와주는 Spring Security의 확장 기능입니다.
- OAuth 2.0 Client를 사용하면 사용자를 대신하여 외부 서비스로 인증하고 액세스 토큰을 얻어오는 작업을 쉽게 처리할 수 있습니다.
- Authorization (권한 부여):
- Authorization은 애플리케이션 내에서 사용자나 클라이언트에 대한 권한을 관리하는 프로세스를 나타냅니다.
- Spring Security에서는 권한 부여를 위해 다양한 방식을 지원합니다. 가장 일반적인 방식은 역할 기반 권한(ROLE-based)을 사용하는 것이며, 사용자에게 특정 역할(예: USER, ADMIN)을 할당하여 접근 권한을 제어합니다.
- 특정 URL 패턴 또는 메서드에 대한 접근을 제한하거나, 특정 리소스에 대한 권한을 검사할 수 있습니다.
- Client Support (클라이언트 지원):
- Spring Security는 다양한 클라이언트 유형(웹 애플리케이션, 모바일 앱, 서비스 등)을 지원하며, 이들 클라이언트가 인증 및 권한 부여 프로세스를 안전하게 수행할 수 있도록 도와줍니다.
- 클라이언트 지원은 주로 OAuth 2.0 및 OpenID Connect와 관련이 있으며, Spring Security OAuth2 Client 및 Spring Security OAuth2 Resource Server 모듈을 사용하여 클라이언트 애플리케이션을 인증 및 권한 부여 기능과 연동할 수 있습니다.
- 이러한 클라이언트 지원은 안전한 웹 및 애플리케이션 개발을 가능하게 하며, 외부 서비스와의 통합을 용이하게 합니다.
Spring Security Core와 OAuth 2.0 Client는 Spring 기반 애플리케이션에서 보안 및 권한 부여를 구현하는 데 중요한 역할을 합니다. 이를 통해 사용자 인증, 권한 부여, 및 외부 서비스와의 통합을 보다 쉽게 처리할 수 있습니다.
스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한,인가 등)을 담당하는 스프링 하위 프레임워크이다. 주로 서블릿 필터와 이들로 구성된 필터체인으로의 위임모델을 사용한다. 그리고 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다
용어 정리
- 접근 주체(Principal): 보호된 리소스에 접근하는 대상
- 인증(Authentication): 보호된 리소스에 접근한 대상에 대해 이 유저가 누구인지, 애플리케이션에 작업을 허용해도 되는지
- 인가 (Authorization): 해당 리소스에 대해 접근 권한을 가지고 있는지 확인하는 과정 (인증 이후의 작업입니다.)
- 권한 :
- GrantedAuthority: GrantAuthority는 현재 사용자(principal)이 가지고 있는 permission(허가) GrantedAuthority는 principal에 주어진 권한입니다. ROLE_ADMINISTRATOR나 ROLE_HR_SUPERVISOR와 같이 보통 "roles" 이라고 하고, GrantedAuthority 객체는 UserDetailsService에 의해 보통 로드됩니다.
- 사용자가 가지고 있는 permission인 Authorities들을 가져와서 특정 자원(resource)에 권한이 있는지를 체크하여 접근을 허용할지 말지를 체크하는데 쓰입니다