부트캠프(57일차)

성준혁·2023년 1월 17일
0
post-thumbnail

오늘은 부트캠프 57일차이다. 프로젝트 2일차이고 내가 맡은 기능은 회원가입/로그인/로그아웃, jwt와 스프링 시큐리티를 이용하여 구현하는 것이다. 오늘은 서비스 이외 다른 기능을 구현을 하였고, 내일 포스트맨까지 해서 git까지 올리는 것이 목표인데 쉽지 많은 않을 것 같다. 벌써 오류 잡은 시간만 1~2시간 걸린 거 같다. 그리고 저번 프로젝트에서 시큐리티와 jwt를 안해보고 해보고 싶어서 한다고 했지만 너무 어려웠고 배울게 너무 많았다.

오늘 배운 것
1. Spring Security

  • Spring 기반 애플리케이션에 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임워크. 사실상 Spring 기반 애플리케이션 보안의 표본이다.
  • Spring Security는 "인증"과 "권한(인가)"에 대한 부분을 Filter의 흐름에 따라 처리합니다.
  • Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안 관련 로직을 작성하지 않아도 된다는 장점이 있다.
  • Spring Security는 기본적으로 인증 절차를 거친 후에 인가 절차를 진행하게 되며, 인가 과정에서 해당 리소스에 대한 접근 권한이 있는지 확인을 하게 된다.
  • Spring Security에서는 이러한 인증과 인가를 위해 Principal을 아이디로, Credential을 비밀번호로 사용하는 Credential 기반의 인증 방식을 사용한다.
  1. 용어 정리
  • 접근 주체(Principal) : 보호된 Resource에 접근하는 유저
  • 비밀번호(Credential): Resource에 접근하는 대상의 비밀번호
  • 인증(Authenticate) : 접근 주체가 누구인지 확인
  • 인가(Authorize) : 어떤 Resource에 접근할 수 있는 권한이 있는지 검사(ex. admin, user)
  • 권한 : 인증된 주체가 Resource를 접근할 수 있도록 권한을 결정
    • 웹 요청 권한, 메소드 호출 및 도메인 인스턴스에 대한 접근 권한 부여로 두 가지 영역이 존재
  1. Spring Security의 구조
    인증 관련 architecture
  2. Spring Security는 세션-쿠키 방식으로 인증
  • http request 요청
  • AuthenticationFilter를 통해 (2→6) User까지 간다
  • User에 있는 유저라면 UserDetails로 꺼내 session 생성 (7→0)
  • spring security의 인메모리 세션 저장소인 SecurityContextHolder에 저장 (10)
  • 유저에게 session ID와 함께 응답을 내려줌
  • 이후 요청에서는 요청 쿠키에서 JSESSIONID를 까 봐서 검증 후 유효하면 Authentication를 쥐어준다.
  1. Spring Secutrity 필터 체인 구조

    각 필터 별 기능 설명
  • SecurityContextPersistenceFilter SecurityContextRepository에서 SecurityContext를 가져오거나 저장하는 역할 담당
  • LogoutFilter 지정된 로그아웃 URL에 대한 요청을 감시하며, 매칭 되는 해당 유저를 로그아웃 처리
  • UsernamePasswordAuthenticationFilter 사용자명과 비밀번호로 이뤄진 폼 기반 인증에 사용하는 가상 URL요청을 감시하고 요청이 있으면 사용자의 인증을 진행
  • DefaultLoginPageGeneratingFilter 폼기반 또는 OpenID 기반 인증에 사용하는 가상 URL에 대한 요청을 감시하고 로그인 폼 기능을 수행하는데 필요한 HTML을 생성
  • BasicAuthenticationFilter HTTP 기본 인증 헤더를 감시하여 처리
  • RequestCacheAwareFilter 로그인 성공 후, 원래 요청 정보를 재구성하기 위해 사용
  • SecurityContextHolderAwareRequestFilter HttpServletRequestWrapper를 상속한
  • SecurityContextHolderAwareRequestWapper 클래스로 HttpServletRequest 정보를 감싼다.
  • SecurityContextHolderAwareRequestWrapper 클래스는 필터 체인상의 다음 필터들에게 부가정보를 제공
  • AnonymousAuthenticationFilter 이 필터가 호출되는 시점까지 사용자 정보가 인증되지 않았다면 인증 토큰에 사용자가 익명 사용자로 나타난다
  • SessionManagementFilter 인증된 주체를 바탕으로 세션 트래킹을 처리해 단일 주체와 관련한 모든 세션들이 트래킹 되도록 도운다.
  • ExceptionTranslationFilter 이 필터는 보호된 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달하는 역할을 한다.
  • FilterSecurityInterceptor 이 필터는 AccessDecisionManager로 권한 부여 처리를 위임함으로써 접근 제어 결정을 쉽게 해 준다.
  1. 특징
  • 독립적인 운용을 지향
  • 인증 및 권한 부여 모두에 대한 포괄적이고 확장 가능한 지원
  • 세션 고정, 클릭재킹, 사이트 간 요청 위조 등의 공격으로부터 보호
  • 서블릿 API 통합
  • Spring Web MVC와의 선택적 통합, 즉 독립적
  1. 기능
  • 사용자 권한에 따른 URI 접근 제어
  • DB와 연동하는 Local strategy 로그인
  • 쿠키를 이용한 자동 로그인
  • 패스워드 암호화

0개의 댓글