본문 바로가기
Web/Spring

[Spring Security] 1편. 인증/인가 & 소개

by 조엘 2022. 8. 15.

안녕하세요! 조엘입니다!

 

우리가 사용하는 서비스에서는 한 번 로그인하면 계속 로그인 상태가 유지되는 것이 일반적인데요. 

Spring 진영에서 회원에 대한 인증/인가가 필요하다면 spring security를 쓰는 게 좋은 옵션일 수 있어요. 

이번 포스팅에서는 인증/인가가 무엇인지, spring security는 무엇인지 하나씩 알아봅시다! 💪💪

 

 

인증/인가

인증/인가는 서비스에서 사용자에 대한 검사를 할 때 필요해요.

인증은 사용자가 누구인지를 확인하고, 인가는 사용자가 실행하는 요청에 권한이 있는지를 확인해요. 

와닿지 않는데, 좀 더 자세히 알아볼까요?

 

인증(Authentication)

인증은 사용자가 누구인지 신원을 확인하는 절차예요. 

회원가입/로그인 요청이 대표적인 인증의 예시예요. 

 

일반적인 로그인 요청의 인증 flow를 생각해보면 다음과 같은데요. 

 1. 등록된 아이디와 비밀번호를 입력한다. 

 2. DB에 해당 아이디와 비밀번호로 저장된 사용자가 있는지 검사한다. 

 3. 있다면 로그인 인증에 성공한 것이며, 해당 사용자를 나타내는 세션/토큰 등을 발급한다. 

 4. 세션/토큰을 통해 이어지는 서비스 사용은 로그인 인증 과정을 생략하고 사용한다. 

 

인가(Authorization)

인가는 사용자가 요청하는 행동을 해당 사용자가 실행할 수 있는지에 대한 권한 검사를 뜻해요. 

세션/토큰 기반으로 사용자가 요청하는 행동을 처리할 수 있는지를 검사하는 것이죠. 

 

세션/토큰 기반의 인가 flow를 생각해보면 다음과 같아요. 

 1. 로그인 인증을 통해 세션/토큰을 생성한다. 해당 세션/토큰은 사용자의 정보와 연관을 갖는다. 

 2. 사용자가 수행하고자 하는 요청을 보낼 때, 세션/토큰을 포함하여 요청을 보낸다. 

 3. 서버는 세션/토큰의 정보를 통해 사용자 권한을 확인한다. 

 4. 사용자 권한이 확인되면 요청을 실행한다. 

 

한 번 로그인 시 로그인 상태를 일정 기간동안 유지하는 현대 웹서비스의 경우, 인증/인가에 대한 구현은 필수적이에요. 

사용자가 로그인할 수 있는지 검사하고, 일정 수준의 권한을 가진 사용자만 기능을 사용할 수 있도록 서버를 구축해야 하기 때문이죠!

 

Spring Security는 Spring 진영에서 인증/인가를 담당하는 프레임워크에요. 

 

 

Spring Security

Spring Security 공식 페이지에서는 Spring Security를 다음과 같이 소개하고 있어요. 

Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.

Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements. 

 Features

  • Comprehensive and extensible support for both Authentication and Authorization
  • Protection against attacks like session fixation, clickjacking, cross site request forgery, etc
  • Servlet API integration
  • Optional integration with Spring Web MVC
  • Much more

Spring Security는 커스텀이 용이한 강력한 인증/인가 프레임워크이다. 이는 스프링 기반 애플리케이션에서 사실상 표준으로 쓰인다. 

 

Spring Security는 자바 어플리케이션에서 인증/인가를 제공하는 데에 초점을 맞춘다. 다른 모든 스프링 프로젝트들처럼, Spring Security의 진짜 장점은 사용자 요구를 충족시키면서도 쉽게 확장할 수 있다는 것에 있다. 

 

기능

  • 인증/인가에 대한 종합적이며 확장 가능한 지원
  • Session Fixation, Clickjacking, CSRF 등의 공격으로부터의 방어
  • Servlet API 통합
  • Spring Web MVC와의 선택적 통합
  • 기타 등등

Spring Security의 장점은 Spring 진영에서 인증/인가 로직을 철저히 분리하여 관리할 수 있다는 것에 있어요. 

또한 기본적인 웹 보안과 관련된 설정들을 손쉽게 할 수 있고요. 

 

분리시켜 관리하니 확장에 용이하고, Spring MVC와 관계없이 구축할 수 있어요.

이는 마치 객체지향의 장점처럼 들리는데요, 전 사실 Spring Security 쓰면서 단점도 많이 느끼긴 했답니다. 🥲

 

다음 포스팅에서 스프링 시큐리티에 대해 조금 더 자세히 알아보아요. 

 

참고

- https://www.okta.com/kr/identity-101/authentication-vs-authorization/

- https://ivorycode.tistory.com/entry/%EC%9D%B8%EC%A6%9DAuthentication%EA%B3%BC-%EC%9D%B8%EA%B0%80Authorization

- https://spring.io/projects/spring-security

 

반응형

댓글