spring security + jwt 실습(1)

Minky·2021년 10월 3일
0

실무 환경과 동일한 spring security +jwt 토큰 인증방식에 대해 제대로 알고싶어 인프런 강의 + 직접 실습한 내용을 기록하고자 한다.

학습한 강의와 실습 프로젝트는 아래와 같다.


목표

  • spring security와 jwt의 각 개념을 이해한다.


Spring securiry란?

  • Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 하위 프레임워크.
  • 인증(Authentication)과 권한(Authorization)에 대한 부분을 Filter 흐름에 따라 처리.
  • dispatcher servlet 이전에 처리된다.
  • 기본적으로 세션&쿠키 방식으로 인증되며, 어노테이션으로 간단한 설정이 가능하다.

기본 용어

  • 인증 (Authentication) : 누구인가?
    사용자 본인이 맞는지 확인하는 절차.(ex. 로그인)
  • 인가 (Authoriation) : 어떤것을 할 수 있는가?
    인증된 사용자가 요청한 자원에 접근이 가능한지 확인하는 절차. (ex. 로그인한 유저가 게시글을 쓸수있는 권한이 있는지)
  • Principal(접근 주체) : 보호받는 자원(리소스)에 접근하는 유저
  • Credential(비밀번호) : 자원(리소스)에 접근하는 대상의 비밀번호

JWT(Json Web Token)

  • Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 claim 기반의 web token.
  • rfc7519웹표준.

JWT 구조

JWT는 Header, Payload, Signature 이 세가지로 이뤄져있으며, 각 부분은 Base64로 인코딩 되어 표현된다.

  • header
    signature를 해싱하기 위한 알고리즘 정보가 담겨져있다.
{ 
  	"alg": "HS256", // 알고리즘 방식 지정. HS256(SHA256) 또는 RSA
 	"typ": JWT // 토큰 타입 지정
}
  • Payload
    시스템에서 실제로 사용될 정보. 토큰에서 사용할 정보의 조각들인 클레임(claim)이 담겨있다.클레임은 총 3가지로 나누어지며, Json(Key/Value) 형태로 다수의 정보를 넣을 수 있다.

  • Signature
    토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다.
    서명(Signature)은 위에서 만든 헤더(Header)와 페이로드(Payload)의 값을 각각 BASE64로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더(Header)에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64로 인코딩하여 생성한다.
    즉, 토큰의 유효성 검증을 위한 문자열. ->서버에서는 이 문자열로 유효한 토큰인지 검증한다.

JWT 장단점

  • 장점
    중앙의 인증서버, 데이터 스토어에 대한 의존성 없음.
    시스템 수평 확장 용이. base64 url safe encoding > url, cookie, headr 모두 사용가능.

  • 단점
    페이로드의 정보가 많아지면 네트워크 사용량 증가.
    클라이언트에 저장 되므로 서버에서 조작하기 어려움.


참고

https://frozenpond.tistory.com/94
https://spring.io/projects/spring-security
https://mangkyu.tistory.com/56 [MangKyu's Diary]
https://velog.io/@dnjscksdn98/Spring-Spring-Security%EB%9E%80
https://mangkyu.tistory.com/76

profile
소통하는 Web Developer가 되고 싶습니다 :)

0개의 댓글