Spring Boot (27) JWT

넙데데맨·2022년 11월 22일
0
post-custom-banner

JWT

Json Web Token
당사자 간의 정보를 JSON 형태로 안전하게 전송하기 위한 토큰

특징

  • URL로 이용할 수 잇는 문자열로만 구성
    - HTTP 구성요소 어디든 위치할 수 있다.
  • 디지털 서명이 적용되어 신뢰할 수 있다.
  • 주로 서버와의 통신에서 권한 인가를 위해 사용됨

구조

.으로 구분된 세 부분으로 구성되어 있다.

  • 헤더
  • 내용
  • 서명
    JWT의 일반적인 구성
    x,y,z는 각각 헤더, 내용, 서명
    xxxxx.yyyyy.zzzzz

헤더

검증과 관련된 내용을 담고 있다.
헤더는 두 가지 정보를 포함하고 있다.
alg : 해싱 알고리즘을 지정(보통 SHA256, RSA 사용)
typ : 토큰의 타입을 지정

{
	"alg" : "HS526",
    "typ" : "JWT"
}

이렇게 완성된 헤더는 Base64Url 형식으로 인코딩돼 사용됨

Base64

  • 8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념
  • Base64Url은 해당하는 인코딩 방식에서 Url에서 사용되는 문자인 +,/를 각각 -,_으로 수정한 방식

내용

토큰에 담는 정보를 포함하며 이곳에 포함된 속성은 클레임이라고 한다.

클레임

  • 등록된 클레임
  • 공개 클레임
  • 비공개 클레임

등록된 클레임
필수는 아니지만 토큰에 대한 정보를 담기 위해 이미 이름이 정해진 클레임

  • iss : JWT의 발급자 주체를 나타냄
  • sub : JWT의 제목
  • aud : JWT의 수신인, 요청을 처리하는 주체
  • exp : JWT의 만료 시간
  • nbf : Not Before를 의미
  • iat : JWT가 발급된 시간
  • jti : JWT의 식별자

공개 클레임
키 값을 마음대로 정의할 수 있다.
다만 충돌이 발생하지 않도록 주의해야함

비공개 클레임
통신간에 상호 합의되고 등록된 클레임과 공개된 클레임이 아닌 클레임

이렇게 완성된 내용은 Base64Url 형식으로 인코딩되어 사용된다.

서명

인코딩된 헤더, 인코딩된 내용, 비밀키, 헤더의 알고리즘 속성값을 가져와 생성된다.

profile
차근차근
post-custom-banner

0개의 댓글