일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- EC2
- CSV
- Spring
- jvm
- Operating System
- kubeadm
- JavaScript
- aws s3
- log
- Python
- OS
- kubectl
- helm
- Kafka
- Network
- Packet
- ip
- docker
- PostgreSQL
- CVAT
- Trino
- AWS
- MAC address
- grafana
- zookeeper
- Vision
- kubernetes
- tcp
- airflow
- java
Archives
- Today
- Total
JUST WRITE
JWT 본문
JWT
JSON Web Token
JWT는 속성 정보를 JSON 데이터 구조로 표현한 Token으로 RFC7519 표준입니다.
URL Safe 한 JSON Token으로 URL에 포함될 수 있는 문자로만 구성됩니다.
HTTP Header에 JWT를 넣은 후 Server는 별도의 인증 과정 없이 JWT를 통해 인증합니다.
JWS JWE
JWT와 관련된 표준으로 JWS(JSON Web Signature)와 JWE(JSON Web Encryption)이 있다.
JWS
JWS는 JSON으로 서명하여 URL Safe 한 문자들로 구성한 것이다.
RFC7515 표준을 따른다.
JWE
JWE는 JSON 데이터를 암호화하여 URL Safe한 문자들로 구성한 것이다.
RFC7516 표준을 따른다.
JWT 구성
JWT는 Header, Payload, Signature 3파트로 구성된다.
JWT는 URL에서 Parameter로 사용할 수 있도록 Base64 URL Encoding을 사용한다.
Header
Header에는 Token의 Type과 알고리즘 정보를 담고 있다.
Token Type에는 JWT가 들어간다.
{
"typ": "JWT",
"alg": "HS256"
}
Payload
Payload에는 Token에 담을 정보를 담고 있다.
Payload에 넣는 Name, Value로 이루어진 정보 한 조각을 Claim이라고 한다.
Claim에는 3가지 종류가 있다.
- Registered Claim
- Token에 대한 정보를 담기 위해 미리 정해진 Claim
- iss(issuer) -> Token 발급자
- sub(subjet) -> Token 제목
- aud(audience) -> Token 대상자
- exp(expiration) -> Token 만료시간
- nbf(Not Before) -> Token 활성날짜와 비슷한 개념
- iat(issued at) -> Token이 발생한 시간
- jti -> Token 고유 식별자
- Public Claim
-
- 충돌이 방지된(collision-residant) Name(URI 형식)을 가진 Claim
- Private Claim
- Registered Claim, Public Claim도 아닌 Claim
Signature
Siganature에는 서명을 담고 있다.
Header를 Encoding한 값 + Payload를 Encoding 한 값을 Private Key로 Hash하여 생성합니다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWT 과정
- User가 ID, Password로 Login 시도
- Server에서 User 확인 후 Secret Key를 통해 JWT를 발급하여 Client로 전달
- Client에서 다음 Request시 HTTP Header에 JWT를 담아서 Server에 전달
- Server는 JWT Signature로 확인 후 Payload로 담긴 User 정보 확인
- Server에 정보를 따로 저장하지 않고 JWT 기반으로 검증 -> Header에 JWT 존재 확인
JWT 장점과 단점
장점
- 별도의 저장소 필요 X
- 디버깅, 관리가 용이
- REST 서비스로 제공 가능
- 독립적
단점
- 정보를 추가할 수록 Token이 커짐
- 모든 Request에 Token을 전송
728x90
반응형
'Network' 카테고리의 다른 글
CORS (0) | 2021.12.19 |
---|---|
SOP (0) | 2021.12.17 |
Synchronous vs Asynchronous (0) | 2021.11.12 |
GET vs POST (0) | 2021.09.22 |
SSL (0) | 2021.09.18 |
Comments