본문 바로가기
Today I Learned/Spring

[Spring] Spring Security

by 프로그래 밍구 2022. 9. 27.

 커피를 주문할 수 있는 커피 주문 어플리케이션을 만들었다. 보안을 전혀 고려하지 않은 상태로 오픈을 하였다고 가정하면 어떤 문제가 발생할 수 있을까?

로그인(인증, Authentication) 기능이 없다.

 로그인 기능이 없다면 자신을 증명할 방법이 없기 때문에 다른 사람이 회원으로 등록한 내 정보 또는 내가 주문한 정보 등에 대해서 애플리케이션의 API 호출해서 얼마든지 조회가 가능하게 된다. 이 상태로는 다른 사람의 개인정보를 탈취하는 것은 식은 죽 먹기가 될 것이다.

API에 대한 권한 부여(인가, Authorization) 기능이 없다.

 커피를 주문하는 손님은 메뉴판에 카페의 커피 정보를 마음대로 등록할 수 없어야 한다. 하지만 API에 대한 접근 권한이 부여되지 않는다면 손님이 마음대로 카페 메뉴를 등록할 수 있는 일이 발생한다.

웹 보안 취약점에 대한 대비가 전혀 이루어지지 않았다.

 웹 애플리케이션을 위협하는 세션 고정 공격, 클릭재킹 공격, CSRF 등의 보안 취약점에 대한 고려가 전혀 이루어지지 않은 상태이다.

 

 Spring Security라는 보안 프레임워크를 이용하여 이 애플리케이션에서 발생되는 보안 문제점을 해결할 수 있다.

 

Spring Security 란?

 Spring Security는 Spring MVC 기반 애플리케이션의 인증(Authentication)과 인가(Authorization) 기능을 지원하는 보안 프레임워크로써, Spring MVC 기반 애플리케이션에 보안을 적용하기위한 사실상의 표준이다. Spring에서 지원하는 Interceptor나 Servlet Filter를 이용해서 보안 기능을 직접 구현할 수 있지만 웹 애플리케이션 보안을 대부분의 기능을 Spring Security에서 안정적으로 지원하고 있기 때문에 구조적으로 잘 만들어진 검증된 Spring Security를 이용하는 것이 안전한 선택이라고 볼 수 있다.

Spring Security의 보안 강화 기능

✔ 다양한 유형(폼 로그인 인증, 토큰 기반 인증, OAuth 2 기반 인증, LDAP 인증)의 사용자 인증 기능 적용
✔ 애플리케이션 사용자의 역할(Role)에 따른 권한 레벨 적용
✔ 애플리케이션에서 제공하는 리소스에 대한 접근 제어
✔ 민감한 정보에 대한 데이터 암호화
✔ SSL 적용
✔ 일반적으로 알려진 웹 보안 공격 차단
✔ 이 외에도 SSO, 클라이언트 인증서 기반 인증, 메서드 보안, 접근 제어 목록과 같은 보안을 위한 대부분의 기능을 지원

Spring Security에서 사용하는 용어 정리

Principal(주체)

Spring Security에서 사용되는 Principal은 애플리케이션에서 작업을 수행할 수 있는 사용자, 디바이스 또는 시스템 등이 될 수 있으며, 일반적으로 인증 프로세스가 성공적으로 수행된 사용자의 계정 정보를 의미한다.

Authentication(인증)

Authentication은 애플리케이션을 사용하는 사용자가 본인이 맞음을 증명하는 절차를 의미한다. Authentication을 정상적으로 수행하기 위해서는 사용자를 식별하기 위한 정보가 필요한데 이를 Credential(신원 증명 정보)이라고 한다. 예를 들어 특정 사이트에 로그인을 위해 입력하는 패스워드 역시 로그인 아이디를 증명하기 위한 Credential이 된다.

Authorization(인가 또는 권한 부여)

 Authorization은 Authentication이 정상적으로 수행된 사용자에게 하나 이상의 권한(authority)을 부여하여 특정 애플리케이션의 특정 리소스에 접근할 수 있게 허가하는 과정을 의미한다. Authorization은 반드시 Authentication 과정 이후 수행되어야 하며 권한은 일반적으로 역할(Role) 형태로 부여된다. 

Access Control(접근 제어)

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

댓글