코드 그라데이션
JWT 개념 발췌 본문
인증 : Authentication
인가 : Authorization
참고도서 : 스프링 부트 핵심 가이드(장정우 저)
JWT
(JSON Web Token) : 당사자 간에 정보를 JSON 현태로 안전하게 전송하기 위한 토큰
- JWT는 URL로 이용할 수 있는 문자열로만 구성되어 있으며, 디지털 서명이 적용되어 있어 신뢰할 수 있다.
- JWT는 주로 서버와의 통신에서 권한 인가를 위해 사용한다.
- URL에서 사용할 수 있는 문자열로만 구성되어 있기 때문에 HTTP 구성요소 어디든 위치할 수 있다.
JWT의 구조
헤더(Header)
내용(Payload)
서명(Signature)
헤더에는 검증과 관련된 내용이 담겨 있다. 두 가지 정보가 포함되어 있는데, alg와 typ 속성이다.
1) alg에서는 해싱 알고리즘을 지정한다.
- 이것은 보통 SHA256 또는 RSA를 사용하며, 토큰을 검증할 때 사용되는 서명 부분에서 사용한다.
- 아래 예제의 HS256은 "HMACSHA256" 알고리즘을 사용한다는 뜻
2) typ 속성에는 토큰의 타입을 지정한다.
내용에는 토큰에 담는 정보를 포함한다.
- 이곳에 포함된 속성들은 클레임(claim)이라고 하며, 크게 세 가지로 분류된다.
1) 등록된 클레임(Registered Claim)
- 필수는 아니지만 토큰에 대한 정보를 담기 위해이미 이름이 정해져 있는 클레임을 뜻한다.
* iss : JWT의 발급자(issuer) 주체를 나타낸다. iss의 값은 문자열이나 URI를 포함하는 대소문자를 구분하는 문자열이다.
* sub : JWY의 제목(Subject)이다.
* aud
: JWT의 수신인(Audience)이다. JWT를 처리하려는 각 주체는 해당 값으로 자신을 식별해야 한다. 요청을 처리하는 주체가 'aud' 값으로 자신을 식별하지 않으면, JWT는 거부된다.
* exp : JWT의 만료시간(Expiration)이다. 시간은 NumericDate형식으로 지정해야 한다.
* nbf : Not Before을 의미한다.
* iat : JWY가 발급된 시간(Issued at)을 의미한다.
* jti : JWT의 식별자(JWT ID)이다. 주로 중복 처리를 방지하기 위해 사용된다.
2) 공개 클래임(Public Claim)
- 키 값을 마음대로 정의할 수 있다. 다만 충돌이 발생하지 않을 이름으로 정의해야 한다.
3) 비공개 클래임(Private Claim)
- 통신 간에 서로 합의되고 등록된 클래임과 공개된 클레임이 아닌 클레임을 의미한다.
서명
- JWT의 서명 부분은 인코딩된 헤더, 인코딩된 내용, 비밀키, 헤더의 알고리즘 속성값을 가져와서 생성된다.
'Spring > 핵심 가이드' 카테고리의 다른 글
docker redis springboot intelliJ에서 설치하기, 사용은 Gradle (by. chat GPT) (0) | 2023.02.23 |
---|---|
템플릿 엔진과 타임리프, 요청 파라미터 (0) | 2023.01.15 |
스프링 MVC, 요청과 응답 사이의 흐름 (0) | 2023.01.15 |
어노테이션과 AOP (0) | 2023.01.14 |
데이터베이스, 테이블, 엔티티, 리포지토리 (0) | 2023.01.14 |