본문 바로가기
Spring/Spring-Security

JWT (Json Web Token) 의 개념

by YoonJong 2022. 10. 19.
728x90

JWT 는 당사자간의 정보를 JSON 객체로 안전하게 전송하기 위한 방법이다.

 


https://jwt.io/

헤더 - Header

어떤 알고리즘이 사용되었는지 유형은 무엇인지 확인할 수 있다.

헤더에 있는 알고리즘으로 Signature에서 사용한다.

알고리즘은 SHA256 또는 RSA 를 대중적으로 사용한다.

RSA 는 비대칭키 암호화 방식을 사용해 잠금한다.

 

 

공식홈페이지 예시로는 HS256 알고리즘을 사용하며, 유형은 JWT 라는 것을 알 수 있다.

https://jwt.io/


페이로드 - Payload

민감한 정보를 담으면안된다. JWT 를 가지고 디코딩을 하면 해당 값을 모두 알 수 있기 때문이다.

 

클레임을 포함하고 있다

클레임이란 사용자 및 추가 데이터에 대한 설명을 의미한다.

구성된 페이로드는 Base64Url로 인코딩된다.

 

클레임은 3가지로 나뉜다.

 

1. 등록된 클레임 : 토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터로 String 타입 3글자로 이다.

필수값이 아니며, 자유롭게 기입이 가능하다.

 

 - iss : 토큰발급자 issuer

 - exp : 만료시간 expirtation

 - sub : 토큰제목 subject

 - aud : 토큰대상 audience

 - nbf : 토큰 활성날짜(이전날짜는 활성화 X 보장) not before

 - iat : 토큰 발급 시간 Issued at

 - jti : 토큰 식별자  JWT ID

 

2. 공개 클레임 : 사용자 정의 클레임, 공개용 정보를 위해 사용한다. URL 형태로 나타낸다

 

3. 비공개 클레임 : 사용자 정의 클레임, 서버와 클라이언트 사이에 임의로 지정한 정보를 저장

 

https://jwt.io/


서명

토큰을 인코딩하거나 유효성 검증을 할때 사용하는 고유한 암호화 코드이다.

 

Header 와 Payload 를 Base64Url 로 인코딩을 한다.

비밀키를 이용해 헤더에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 Base64Url 로 인코딩해서 생성한다.

 

https://jwt.io/


생성된 토큰은 HTTP 통신을 하기 위해서 Authorization 이라는 Key 와 Bearer 가 앞에 붙어 있는 value 를 사용한다.

https://jwt.io/

 

토큰과 세션의 차이 및 장단점에 관해서는 아래 포스팅에서 볼 수 있다.

https://josteady.tistory.com/721

 

세션(서버) 기반 VS 토큰 기반 차이

인증 (Authentication) : 사용자가 맞는지 확인 -> 로그인 인가 (Authorization) : 권한부여 -> 자신이 작성한 글 확인 등 ( 인증 이후 ) 1. 세션기반 인증 세션 기반 인증은 서버 기반의 인증방식이다. 따라서

josteady.tistory.com

 

728x90

댓글