Spring Security

젤리젤링텀·2023년 7월 3일
0

Spring, SpringBoot

목록 보기
4/8
post-thumbnail

Spring Security

  • 스프링 기반 애플리케이션의 인증과 권한을 담당하는 하위 프레임워크

build.gradle에 다음과 같은 dependencies 추가.

implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6:3.1.1.RELEASE'

이제 프로젝트를 Run 하고, localhost:8080에 접속하면, 다음과 같은 화면 표시됨.

스프링 시큐리티는 인증되지 않은 사용자는 서비스를 사용할 수 없게끔 되어있다. 그러나 이 상태로는 서비스를 운영하기 어렵기 때문에, 시큐리티 설정을 바꾸어 주어야 한다.
ex) 로그인을 하지 않아도 게시물 조회, 검색 등을 할 수 있도록.

src/main/java/com.프로젝트명/SecurityConfig.java 를 생성해준다.

SecurityConfig.java

  • @Configuration은 환경설정을 의미하는 어노테이션이다.
  • @EnableWebSecurity는 모든 요청 URL이 스프링 시큐리티의 제어를 받도록 만드는 어노테이션이다.
  • 클래스에서는 내부적으로 SpringSecurityFilterChain이 동작하여 URL 필터가 적용되게 한다.
  • 일단 모든 인증되지 않은 요청을 허락하게 해주었다. 따라서 로그인을 하지 않더라도, 모든 페이지에 접근할 수 있다.

Spring Security Dependency를 추가하면 일어나는 일들

서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다.
별도의 설정이나 구현을 하지 않아도, 기본적인 웹 보안 기능이 현재 시스템에 연동된다.

  1. 모든 요청을 인증이 되어야 자원에 접근이 가능 (초기 설정)
  2. 인증 방식은 폼 로그인 방식과 httpBasic 로그인 방식을 제공
  3. 기본 로그인 페이지 제공
  4. 기본 계정 한 개 제공 user/암호값 (매번 바뀐다)

개발 도중에 매번 성성되는 랜덤 문자열로 로그인 하는 것은 번거롭다.
application.properties에 기본 name/password 를 설정할 수 있다.

Spring Securiy의 문제점

  • 계정 추가, 권한 추가, DB 연동의 복잡함
  • 기본적인 보안 기능 외에 시스템에서 필요로 하는 더 세부적이고 추가적인 보안기능의 필요.

사용자 정의 보안기능 구현으로 보안성을 높일 수 있다.

SecurityConfig 설정 클래스를 생성하고 인증 & 인가 API를 만들어 보안성을 높인다.

Security Config 설정

Login Flow

1. 클라이언트가 홈페이지를 갔다가, 서버에서 인증이 안됐다고 판단하면, 로그인 페이지로 리다이렉트 시킨다.
2. 클라이언트는 로그인 페이지에서 로그인을 하면, 서버에서는 DB의 내용과 비교하여 맞으면 SESSION 및 인증 토큰을 생성, 저장한다.
3. 이제 클라이언트는 SESSION에 저장된 인증 토큰으로 접근하고, 인증을 유지한다.

Logout Flow

클라이언트가 로그아웃을 서버에게 요청하면, 서버는 세션을 무효화 시키고, 인증 토큰을 삭제하고, 쿠키 정보를 삭제하고, 클라이언트를 로그인 페이지로 리다이렉트 시킨다.

동시 세션 제어

  • 사용자가 한 계정으로 여러 기기에서 접속하는 것.
  • 보통 인터넷 강의 플랫폼에서 한 계정을 여러 사람이 돌려쓰는 것을 방지하기 위해 사용.
  • 방지 방법으로 두 가지 방법 사용. (이전 사용자 세션 만료, 현재 사용자 인증 실패)

상황
하나의 계정을 A라는 사람이 먼저 접속해 있는데, B라는 사람이 접속했을 경우.

1. 이전 사용자 세션 만료

  • A의 세션을 만료시키고, B에게 세션을 생성해 준다.

2. 현재 사용자 인증 실패

  • A의 세션을 유지시키고, B의 로그인 인증을 실패시킨다.
profile
열심히 살자

0개의 댓글