Spring Security 개요 및 인증방식 ( 세션 / 토큰 / OAuth )

TopOfTheHead·2025년 11월 12일

Spring Security

목록 보기
2/21

Spring Security

Spring 생태계REST APIWeb Application의 보안(인증: Authentication / 인가: Authorization 등)을 제공하는 Spring Framework.

Spring Security를 통해 보안에 필요한 기능을 제공함으로써 개발자가 보안 관련 logic을 따로 작성할 필요는 없음.

implementation 'org.springframework.boot:spring-boot-starter-security'
  • Complete Mediation :
    Spring Security의존성이 적용되는 경우 어플리케이션의 모든 Resource가 보호되어 접근하는 모든 API호출에 대해 Security Filter Chain에 의한 Authentication을 수행.
    ▶ 기존에 Controller Method에 의해 정의된 API 외에도 존재하지않는 API를 호출하는 경우에도 자격증명을 요구.

    Spring Security 6.x 부터는 람다기반 설정방식 권장

    Spring Filter Chain을 통해 Customize가 가능한 유연한 Security System을 제공하여 사용자에게 적절한 AuthenticationAuthorization이 부여.

  • 기본 로그인페이지로그아웃페이지 URL 제공
    Spring Security 의존성 추가 시 기본적으로 제공되는 기능.

    localhost:8080/login :
    Spring Login Form 도출

    localhost:8080/logout :
    Session Cookie를 삭제하여 기존 로그인된 자격증명을 로그아웃
    ▶ 차후 HTTP Request 전송 시 Authorization Header에 포함되지않아서 요청이 거절됨.
    ▶ HTML의 <a class="nav-link" href="/logout">으로 간단하게 로그아웃 버튼을 생성할 수 있다.

Spring Security 원리
Spring MVC 패턴에서 REST API 호출을 위한 Dispatcher Servlet으로 전송되는 모든 HTTP RequestSpring SecurityIntercept하여 Spring Filter Chain을 통해 HTTP RequestAuthorizationAuthentication검증Dispatcher Servlet으로 전달하여 최종적으로 Contoller로 전달.

Spring Filter Chain에 의한 사용자인증정보에 대한 검증 순서

1. HTTP RequestAuthorization Header에 포함된 JWT Token서버로 전송 시 검증 전의 미완성된 Authentication 구현체 생성
。해당 Authentication 구현체Authorization header에 포함된 사용자인증정보credentials로 포함하고 나머지 authorities, principalnull


2. Controller의 매개변수로 사전에 AuthenticationManager객체.authenticate(Authentication구현체)검증을 수행
AuthenticationManager객체 내에서 사용자인증정보에 적합한 검증기능을 지닌 AuthenticationProvider를 식별 후 검증 수행
JWT인 경우 JwtAutheticationProvider를 사용하여 검증

UserDetailsService를 호출하여 매개변수로 전달된 Authentication instance의 Credentials 정보에서 포함된 username에 해당하는 사용자정보를 DB에서 조회 후 UserDetails 객체로 return.
Authentication instance의 Credentials의 Password와 UserDetails instance의 Password를 서로 비교하여 검증을 수행.


3. 검증 성공HTTP Requestprincipal, authorities, credentials 를 포함한 Authentication 구현체 생성
검증 실패AuthenticationException 발생.

Spring Security의 인증방식
。인증방식 크게 4가지
세션기반 / 토큰기반 / 쿠키기반 / OAuth2.0 기반

  • 세션기반 인증
    서버인증용도 DB에 사용자정보를 저장
    Server-Side사용자 세션을 저장하므로 보안성이 좋음

    서버사용자 세션을 저장하므로 다른 서버에서는 해당 사용자정보를 알 수 없는 단점이 존재
    세션클러스터링, 스티키세션 : redis프록시 서버로 설정하여 요청 시 거쳐가도록하여 사용자세션redis에 저장 및 관리

    Session기반 인증방식은 클라이언트에서 서버에 특정 User에 대한 정보를 요청할때마다 일일이 세션ID의 일치여부를 확인.

  • 토큰기반 인증 ( JWT )
    사용자토큰서버에서 발급하여 보유하면서 서버인증용도로 포함하여 요청
    Client-Side에서 JWT 토큰을 저장

  • OAuth 2.0 기반 인증
    인증, 인가어플리케이션 서버가 아닌 외부의 인증서버( 구글, 카카오 등 )가 대신 수행

OAuth( Open Authorization ) :
사용자자격증명을 직접 제공하지 않아도, 타 어플리케이션자원에 안전하게 접근할 수 있도록 하는 프로토콜
▶ 사용자가 자신의 계정정보를 노출하지 않고도 다른 서비스와 안전하게 연동이 가능.

어플리케이션 서버에서는 인가작업개인정보를 구현하지 않아도되므로 용이하게 사용
▶ 개인정보 취급은 법 등 복잡하게 엮어있어서

  • OAuth 2.0 Resource Server :
    OAuth2.0 Authentication을 기반으로 Authenticated된 사용자에 대해서만 접근할 수 있도록 보호된 API를 제공하는 서버.

    OAuth 주요 개념

    • Resource Owner :
      API를 통해 보호된 Resource를 소유한 주체.
      ex) Google Drive의 파일을 소유하고 있는 클라이언트

    • Client Application :
      Resource Owner 대신 API를 호출하는 어플리케이션
      ex) Google Drive 파일에 접근하고자 하는 Spring Application
      ex) Google 로그인 서비스를 이용하는 웹사이트

    • Resource Server :
      API를 제공하고, 인증Access Token을 포함한 HTTP Request만 허용하는 Server
      Access Token검증하여 HTTP Request를 허용 또는 거부.
      ex) 접근하려는 Google Drive 파일을 보관하는 Server( = Google Drive )

    • Authorization Server :
      클라이언트인증을 담당 및 인증클라이언트에 대해 Access Token을 발급하는 Server
      ex) Google OAuth Server
profile
공부기록 블로그

0개의 댓글