| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- queue
- 스프링부트
- 프로그래머스
- 제로베이스
- 개발자
- 서버
- ORM
- SpringSecurity
- 백준
- LinkedList
- JWT
- spring
- TestCode
- JPA
- restTemplate
- 컴퓨터 구조
- Java
- error
- array
- spring boot
- 연관관계
- 백엔드
- QueryDSL
- 자료구조
- 컴퓨터 공학
- 백엔드스쿨
- 백엔드공부
- 핵심가이드
- SpringBoot
- actuator
Archives
- Today
- Total
be_better
[Springboot] 서비스의 인증과 권한 부여 - JWT 본문
목차
JWT(JSON Web Token)
JWT 특징
- 당사자 간의 정보를 JSON 형태로 안전하게 전송하기 위한 토큰.
- URL로 이용할 수 있는 문자열로만 구성되어 있으며, 디지털 서명이 적용되어 있어 신뢰 가능.
- 주로 서버와의 통신에서 권한 인가를 위해 사용.
- HTTP 구성요소 어디든 위치할 수 있음.
JWT 구조
JWT는 헤더(Header), 내용(Payload), 서명(Signature) 을 "."으로 구분하여 구성된다.

헤더
검증과 관련된 내용
{
/*
해싱 알고리즘 지정,
SHA256 또는 RSA 사용
서명 부분에서 사용됨
"HS256" 은 "HMAC SHA256" 알고리즘 사용을 의미
*/
"alg": "HS256",
/*
토큰의 타입 지정
*/
"typ": "JWT"
}
이렇게 완성된 헤더는 Base64Url 형식으로 인코딩되어 사용된다.
내용
토큰에 담는 정보 포함.
내용에 담기는 속성들은 클레임(Claim) 이라고 하며
- 등록된 클레임(Registered Claims)
- 공개 클레임(Public Claims)
- 비공개 클레임(Private Claims)
세 가지로 분류된다.
등록된 클레임(Registered Claims)
- 필수는 아니지만 이미 이름이 정해져 있는 클레임을 뜻함
- iss: JWT의 발급자(Issuer) 주체를 나타냄. iss의 값은 문자열이나 URI를 포함하는 대소문자를 구분하는 문자열
- sub: JWT의 제목(Subject)
- aud: JWT의 수신인(Audience). JWT를 처리하려는 각 주체는 해당 값으로 자신을 식별해야함. 요청을 처리하는 주체가 'aud' 값으로 자신을 식별하지 않으면 JWT는 거부됨.
- exp: JWT의 만료기간(Expriation). NumericDate 형식으로 지정
- nbf: 'Not Before'를 의미
- iat: JWT가 발급된 시간(issued at)
- jti: JWT의 식별자(JWT ID). 주로 중복 처리를 방지하기 위해 사용
공개 클레임(Public Claims)
키 값을 마음대로 정의.
충돌이 발생하지 않을 이름으로 설정해야함.
비공개 클레임(Private Claims)
통신 간에 상호 합의되고 등록된 클레임과 공개된 클레임이 아닌 클레임을 의미
JWT 내용 예시
{
"sub": "wikibooks payload",
"exp": "1602076408",
"userId": "wikibooks",
"username": "jnjeaaaat"
}
이렇게 완성된 내용은 Base64Url 형식으로 인코딩되어 사용된다.
서명
<인코딩된 헤더, 인코딩된 내용, 비밀키, 헤더의 알고리즘 속성값> 으로 생성
HMAC SHA256 알고리즘을 사용해서 서명을 생성한다면,
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
이와 같은 방식으로 생성됨.
-> 메시지가 도중에 변경되지 않았는지 확인할 때 사용
JWT 디버거 사용하기
JWT.IO
JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.
jwt.io
사이트에서 Header, Payload, Signature 내용 확인 가능
'Springboot > 이론' 카테고리의 다른 글
| [Springboot] 서비스와 인증과 권한 부여 - 스프링 시큐리티와 JWT 적용 (0) | 2023.12.07 |
|---|---|
| [Springboot] Spring Security 필터 동작 (0) | 2023.12.06 |
| [Springboot] 서비스의 인증과 권한 부여 - SpringSecurity 소개 (0) | 2023.12.06 |
| [Springboot] 서버 간 통신 - WebClient (0) | 2023.11.29 |
| [Springboot] 서버 간 통신 - RestTemplate 사용해보기 (0) | 2023.11.29 |