JWT 는 당사자간의 정보를 JSON 객체로 안전하게 전송하기 위한 방법이다.
헤더 - Header
어떤 알고리즘이 사용되었는지 유형은 무엇인지 확인할 수 있다.
헤더에 있는 알고리즘으로 Signature에서 사용한다.
알고리즘은 SHA256 또는 RSA 를 대중적으로 사용한다.
RSA 는 비대칭키 암호화 방식을 사용해 잠금한다.
공식홈페이지 예시로는 HS256 알고리즘을 사용하며, 유형은 JWT 라는 것을 알 수 있다.
페이로드 - 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. 비공개 클레임 : 사용자 정의 클레임, 서버와 클라이언트 사이에 임의로 지정한 정보를 저장
서명
토큰을 인코딩하거나 유효성 검증을 할때 사용하는 고유한 암호화 코드이다.
Header 와 Payload 를 Base64Url 로 인코딩을 한다.
비밀키를 이용해 헤더에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 Base64Url 로 인코딩해서 생성한다.
생성된 토큰은 HTTP 통신을 하기 위해서 Authorization 이라는 Key 와 Bearer 가 앞에 붙어 있는 value 를 사용한다.
토큰과 세션의 차이 및 장단점에 관해서는 아래 포스팅에서 볼 수 있다.
https://josteady.tistory.com/721
'Spring > Spring-Security' 카테고리의 다른 글
SpringSecurity 와 JWT 의 구조, 동작 과정 (0) | 2022.10.23 |
---|---|
SpringSecurity DB 없이 테스트 방법 (0) | 2022.10.20 |
세션(서버) 기반 VS 토큰 기반 차이 (0) | 2022.10.19 |
스프링 시큐리티 설정 추가 (0) | 2022.09.14 |
스프링 시큐리티 소개 (0) | 2022.09.14 |
댓글