[Spring Security] Spring Security란?

Wonjun Seo·2023년 3월 26일
0

Spring Security란?

  • Spring Security는 Spring 기반 애플리케이션의 보안을 담당하는 Spring의 하위 프레임워크이다.
  • 보안과 관련된 체계적인 옵션을 제공하여, 개발자 입장에서 일일이 보안 관련 로직을 작성하지 않아도 된다는 장점이 있다.

인증(Authentication)과 인가(Authorization)

대부분의 시스템에서는 회원을 관리하고 있고, 그에 따른 인증(Authentication)과 인가(Authorization)에 대한 처리를 해야한다.

  • 인증(Authentication): 해당 사용자가 본인이 맞는지 확인하는 과정이다.
  • 인가(Authorization): 해당 사용자가 요청하는 자원을 실행할 수 있는 권한이 있는지를 확인하는 과정이다. 특정 페이지나 리소스에 접근할 수 있는지 권한을 확인한다.

Spring Security에서는 일반적으로 인증 절차를 거친 후에 인가 절차를 진행한다.

Spring Security에서는 이러한 인증과 인가를 위해 Principal(아이디)Credential(비밀번호)를 사용하는 Credential 기반의 인증 방식을 사용한다.


Spring Security 동작방법

위 아키텍쳐를 간단히 설명하면 다음과 같습니다.

  1. 사용자가 로그인 정보와 함께 인증 요청(Http Request)을 한다.
  2. AuthenticationFilter가 요청을 가로채서, 이 정보를 통해 UsernamePasswordAuthenticationToken이라는 인증용 객체를 생성한다.
  3. AuthenticationManager의 구현체인 ProviderManager에게 UsernamePasswordAuthenticationToken 객체를 전달한다.
  4. AuthenticationManager는 등록된 AuthenticationProvider(s)를 조회하여 인증을 요청한다.
  5. 실제 DB에서 사용자 인증정보를 가져오는 UserDetailsService에 사용자 정보를 넘겨준다.
  6. 넘겨받은 사용자 정보를 통해 DB에서 찾은 사용자 정보인 UserDetails 객체를 만든다. 이 때 UserDetails 객체는 인증용 객체와 도메인용 객체를 분리하지 않고 인증용 객체에 상속해서 사용하기도 한다.
  7. AuthenticationProvider(s)는 UserDetails를 넘겨받고 사용자 정보를 비교한다.
  8. 인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체를 반환한다.
  9. 다시 최초의 AuthenticationFilter에 Authentication 객체가 반환된다.
  10. Authentication 객체를 SecurityContext에 저장한다.

Spring Security 의존성 추가 방법

Gradle 방식:

implementation 'org.springframework.boot:spring-boot-starter-security'

Maven 방식:

<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Security 의존성을 추가하면 위와 같이 특정 url에 접속을 할 때 인증을 받게 됩니다. 해당 로그인 화면은 Spring에서 제공하는 기본 로그인 화면이며 사용자의 설정을 통해 사용자가 직접 만든 페이지로 변경할 수 있습니다.

해당 페이지의 로그인 정보는 기본 설정으로 username은 "user"가 기본 아이디이고, 패스워드는 아래에 표시된 문자가 기본 password가 됩니다.

해당 아이디와 비밀번호를 입력하면 접속하고자 하는 url에 접속할 수 있습니다.


Reference

https://mangkyu.tistory.com/76
https://velog.io/@seongwon97/Spring-Security-Spring-Security%EB%9E%80

0개의 댓글