[스프링부트 핵심 가이드] chapter13. 서비스 인증과 권한 부여

이용준·2023년 6월 27일

1.보안 용어 이해

1) 인증(Authentication)

  • 사용자 확인
    • 예 : 로그인
  • 서버는 사용자 일치 확인 후 사용자에게 토큰 전달

2) 인가(Authorization)

  • 사용자 접근 권한 확인
    • 예 : 게시판 별 사용자 접근 등급
  • 사용자가 리소스 접근 시 인증 통해 받은 토큰으로 인가 수행

3) 접근 주체

  • 애플리케이션 사용 주체
  • 사용자, 디바이스, 시스템 등이 될 수 있음

2. 스프링 시큐리티와 동작 구조

1) 스프링 시큐리티

인증, 인가 등의 보안 기능을 제공하는 스프링 하위 프로젝트 중 하나

2) 동작 구조

  • 서블릿 필터(Servlet Filter) 기반으로 동작
    • 클라이언트와 DispatchServlet 앞에 필터 배치
    • 클라이언트와 DispatchServlet 사이 필터 체인(Filter Chain) 배치
    • Filter Chain : 서블릿 컨테이너에서 관리하는 ApplicationFilterChain

  • 서블릿 필터 체인 기반 동작

  • 스프링 시큐리티는 사용하려는 필터 체인을 서블릿 컨테이너 사이에 삽입

    • 이때 DelegatingFilterProxy 사용
  • DelegatingFilterProxy

    • 서블릿 컨테이너 생명주기와 애플리케이션 컨텍스트 사이에서 다리 역할 수행하는 필터 구현체
    • 역할 위임할 필터체인 프록시(FilterChainProxy)를 내부에 소장
    • FilterChainProxy
      • 스프링 시큐리티에서 제공하는 필터
      • 여러 개의 보안 필터체인(SecurityFilterChain)을 갖을 수 있다.
        - 여러 필터 체인(FilterChain)을 리스트 형식으로 담은 것 -> 보안 필터체인(SecurityFilterChain)
        - WebSecurityConfiguredAdapter
        - 여러 개의 보안 필터체인 갖기 위해서는 WebSecurityConfiguredAdapter 클래스 상속받는 클래스 여러 개 생성
        - WebSecurityConfiguredAdapter 클래스에 @Order 어노테이션 통해 우선순위 설정

3. JWT(Json Web Token)

[JWT 구조]

xxx.yyy.zzz

xxx : 헤더 (Header)
yyy : 내용 (Payload)
zzz : 서명 (Signature)
  • 당사자 간 정보를 JSON 형태로 전송하기 위한 토큰
  • 주로 서버와 통신에서 권한 인가를 위해 사용

1) 구조

  1. 헤더(Header)

  2. 검증과 관련된 내용

  3. alg, typ 속성 포함

    		{
    		  "alg": "HS256", # 해싱 알고리즘
    		  "typ": "JWT"  # 토큰 타입
    		}	
    		```
    
  4. 내용(Payload)

  5. 토큰에 담는 정보 포함

  6. 포함된 속성들을 클레임(Claim)이라 함

    1. 등록된 클레임(Registered Claims) - 토큰에 대한 정보 담기 위해 이름이 정해진 클레임
    2. 공개 클레임(Public Claims) - 키 값 임의로 설정 가능
    3. 비공개 클레임(Private Claims) - 통신 간에 상호 합의되고 위 클레임들에 속하지 않는 클레임
  7. 서명(Signature)

  8. 인코딩된 헤더

  9. 인코딩 내용

  10. 비밀키

  11. 헤더 알고리즘의 속성값

2) 역할

  • UserDetails
    • UserDetailsService 통해 입력된 로그인 정보를 통해 DB에서 사용자 정보 가져오는 역할 수행
  • JwtTokenProvider
    • JWT 토큰 생성
profile
뚝딱뚝딱

0개의 댓글