![[Security/JWT] JWT 기초](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQSI1m%2FbtsIiaUvuBt%2FVqhbodlOqSTRoua0ZOpMGK%2Fimg.png)
[Security/JWT] JWT 기초Web Security/JWT2024. 7. 1. 23:24
Table of Contents
728x90
반응형
JWT 정의
JSON Web Token 정보를 안전하게 전송하기 위한 표준 방법 중 하나.
Json객체를 사용해서 정보를 저장하고, 디지털 서명을 통해서 검증한다.
JWT 구성 요소
1. Header
JWT의 타입과 해싱 알고리즘 정보가 들어있다.
단순히 식별을 하기위한 정보만을 담아 두어야 한다.
2. Payload
실제로 전송할 데이터가 담긴 부분. claim이라고 불리는 정보가 포함된다. 세 가지 유형으로 나뉘며 다음과 같다.
- Registered claims:
특정 정보를 제공하기 위한 사전에 정의된 claim들
- iss (Issuer) : 토큰 발급자
- sub (Subject) : 토큰 제목 - 토큰에서 사용자에 대한 식별값이 됨
- aud (Audience) : 토큰 대상자
- exp (Expiration Time) : 토큰 만료 시간
- nbf (Not Before) : 토큰 활성 날짜 (이 날짜 이전의 토큰은 활성화 되지 않음을 보장)
- iat (Issued At) : 토큰 발급 시간
- jti (JWT Id) : JWT 토큰 식별자 (issuer가 여러명일 때 이를 구분하기 위한 값)
- Public claims:
충돌을 피하기 위해 작성되는 URI 형식의 claim - Private claims:
어플리케이션에서 사용할 수 있는 claim
단순히 식별을 하기위한 정보만을 담아 두어야 한다.
3. Signature
Header, Payload의 내용을 인코딩하고, 비밀 키를 사용해서 서명한다.
서명은 메시지가 변경되지 않았음을 확인하는 데 사용된다.
header와 payload를 서버가 가지고 있는 개인 키로 암호화하고 이걸 다시 base64로 인코딩한다.
사용자에게 보내지는 header와 payload로 base64로 인코딩만 상태기 때문에 민감한 정보를 적어서는 안된다.
서버가 나중에 사용자에게서 이 토큰을 받으면 서버가 가지고 있는 개인 키로 복호화 하고 header, payload가 복호화된 정보랑 같은지 확인해서 정보가 오염되거나 변경되었다는 것을 검사한다.
장단점
1. 장점
- 간단함 :
JSON 포맷을 사용해서 여러 플랫폼에서 이용 가능하며 서명을 통해서 검증이 가능하다. - 분산 환경 지원 :
JWT는 데이터베이스에 의존하지 않고 인증을 처리할 수 있어서 MSA 혹은 분산 시스템에서 유용하게 사용될 수 있다. - 확장성 :
claim을 통해서 추가적인 사용자 정보를 저장할 수 있다. 사용자 정의 claim을 추가할 수 있다. - OAuth를 사용해서 소셜 로그인을 가능하게 한다.
- DB를 조회 안해도 되는 장점을 가질 수 있다. (유저 이름, 등급을 저장해두면 되니까)
2. 단점
- 크기 :
정보를 암호화 하다보면 크기가 커질 수 있다. 필요한 데이터를 최소화 해야한다. - 보안 문제:
한번 발급되면 변경할 수 없음으로 만약 토큰이 탈취될시 유효기간 만료될 때까지 접근이 가능하다.
이를 위해서 유효기간을 짧게 설정하고 필요에 따라 토큰을 재발급 해야한다.
spring에서의 jwt사용은 spring security 카테고리로 가주세요~~
728x90
반응형
'Web Security > JWT' 카테고리의 다른 글
[Security/JWT] Access & Refresh Token + 피해 최소화 (0) | 2024.07.02 |
---|
@코딩하는 자연대생 :: 자연대생도 코딩을 하고 싶어
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간