Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- controller
- 정처기
- PULL방식아키텍쳐
- 시계열디비
- 생성자
- spring
- 무중단배포
- aws
- 프로그래머스
- 알고리즘
- 롬북
- java
- 빌드스크립트
- 자바
- 완전탐색알고리즘
- 롬복
- 정보처리기사필기
- 정처기공부
- 정보처리기사
- CICD
- API
- 어노테이션
- Docker
- 정처기필기
- git
- 롬복사용시주의할점
- 서버
- Java8
- 빌드자동화도구
- Groovy문법
Archives
- Today
- Total
우당탕탕 개발일지
💡 JWT(JSON Web Token) 이란? 본문
- JWT(JSON Web Token)
- 당사자 간에 정보를 JSON 형태로 안전하게 전송하기 위한 토큰
- 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미
- URL로 이용할 수 있는 문자열로만 구성 → HTTP 구성요소 어디든 위치할 수 있음
- 디지털 서명이 적용돼 있어 신뢰할 수 있음
- 서버와의 통신에서 권한 인가를 위해 사용
- JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식
🌈 JWT 구조
JWT는 점(’.’)으로 구분된 아래의 세 부분으로 구성됨
헤더(Header)
- 검증과 관련된 내용을 담고 있음
- 완성된 헤더는 Base64Url 형식으로 인코딩 되어 사용됨
- 속성
- alg : 해싱 알고리즘 지정
- SHA256, RSA을 주로 사용하며, 토큰을 검증할 때 사용되는 서명 부분에서 사용
- typ : 토큰의 타입 지정
- alg : 해싱 알고리즘 지정
내용(Payload)
- 토큰에 담는 정보를 포함
- 속성(클레임-Claim)
- 등록된 클레임(Registered Claims)
→ 필수는 아니지만 토큰에 대한 정보를 담기 위해 이미 이름이 정해져 있는 클레임을 뜻함- iss : JWT의 발급자(Issuer) 주체
- sub : JWT의 제목(Subject)
- aud : JWT의 수신인(Audience)
- exp : JWT의 만료시간(Expiration) → 시간은 NumericDate 형식으로 지정해야함
- nbf : ‘Not Befor’
- iat : JWT가 발급된 시간(Issued at)
- jti : JWT의 식별자(JWT ID) → 중복 처리 방지
- 공개 클레임(Public Claims)
→ 키 값을 마음대로 정의 할 수 있음(단, 충돌이 발생하지 않는 이름으로 정의) - 비공개 클레임(Private Claims)
→ 통신 간에 상호 합의되고 등록된 클레임과 공개된 클레임이 아닌 클레임을 의미
- 등록된 클레임(Registered Claims)
서명(Signature)
- 인코딩된 헤더, 인코딩된 내용, 비밀키, 헤더의 알고리즘 속성값을 가져와 생성함
🌈 JWT 생성(디버거 사용)
해당 웹사이트에서 쉽게 JWT 를 생성할 수 있다.
🌈 JWT 실습
1. dependency 👉 JSON Web Token Support For The JVM
2. utils 패키지 생성 👉 JwtTokenUtil 클래스 생성
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtTokenUtil {
public static String createToken(String userName, String key, long expireTimeMs) {
Claims claims = Jwts.claims();
claims.put("userName", userName);
return Jwts.builder()
.setClaims(claims)
.setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(new Date(System.currentTimeMillis() + expireTimeMs))
.signWith(SignatureAlgorithm.HS256, key)
.compact();
}
}
Claims
- 일종의 map으로 key, value로 값을 담을 수 있음
- .put() 으로 값 추가
IssuedAt()
- 현재시간 세팅
Expiration
- 현재시간 + 끝나는 시간
signwith
- 서명
'Spring' 카테고리의 다른 글
[JPA] Pageable이란? (0) | 2022.12.25 |
---|---|
[Spring] ResponseEntity 이란? (0) | 2022.12.22 |
빌더 패턴(Builder Pattern) / 빌더 어노테이션(@Builder) (0) | 2022.11.23 |
[Spring] TDD(Test-Driven-Development), 테스트 주도 개발 정리하기 (0) | 2022.11.18 |
[Spring] @Controller 와 @RestController 차이 (0) | 2022.11.16 |