SlideShare a Scribd company logo
1 of 11
Download to read offline
JWT (JSON Web Token)
● 웹 표준 중 하나 - RFC 7519
● 수많은 프로그래밍 언어에서 라이브러리를 지원함
● 자가 수용적 (Self-contained)
● 쉽게 전달할 수 있음
주요 특징
● Header, Payload, Signature 로 구성되어 있고 각각을 순서대로 period(.) 으로
연결함
내용물
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ2aWRlb0lkIjoiazFuTDBNb1FhQV
Z4dzJtSzA2V040OWI4T1JsSmpwM0UiLCJ2ZXJzaW9uIjoiMS4wIiwiaWF0IjoxN
TExOTUyMDM1LCJleHAiOjE1MTE5NTU2MzUsImF1ZCI6IntcIm1lZGlhSWRcIjp
cIkwzQllYUHlwVjJXZThEOXdaSkExTTV3T3haYXJqZ2I2XCIsXCJ1c2VySWRcIj
pcIldFQjpGSU5HRVJQTFVTOjkxMmY5NjA0LTE4MDYtNDZlNS1hMDNkLWRjZ
WY4MDAxOTdmMVwifSIsImlzcyI6ImV4dC52aWRlby10YWcua3IiLCJzdWIiOiJ
WSURFT3RhZyBBUEkgcGFnZS12aWV3IiwianRpIjoiZTYyYzM1NDgtYTgwZS0
0NTA5LWE2YTQtZTg4NDk1OWFkZTE5In0.qEWSfHfJxaqWMjilWaRaO5s0oQ
vf_fDmSbDryDilAzTpeqmSOYNyBri1l1UoF_n7h_bvqE2issKB6Iy68_b7Ng
Header
Payload
Signature
Header
● Contents
○ typ - 토큰의 타입을 지정, JWT
○ alg - Hashing algorithm 지정
■ HMAC SHA256/SHA512 혹은 RS256/512 가 사용
■ 토큰을 검증할 때 사용되는 signature 부분에서 사용됨
● URL encoding
Payload
● Claim - Key Value Pair
● 이 Claim을 여러 개 넣을 수 있음
● 여러 Claim을 URL Encoding
● Claim의 종류
○ 등록된 (Reserved or Registered)
○ 공개 (Public)
○ 비공개 (Private)
Claim
● Registered Claim - 서비스에서 필요한 정보가 아닌 토큰에 대한 정보를 담기
위해 이미 정해짐
● 항목
○ iss: issuer. 토큰 발급자
○ sub: subject. 제목
○ aud: audience. 대상자
○ exp: expiration. 만료시간
■ NumericDate 형식, epoch time (ms 단위 ) (예: 1480849147370)
○ nbf: not before. 이 시각이 지나기 전까지는 토큰이 처리되지 않음
○ iat: issued at. 발급된 시간. Token의 Age 계산
○ jti: JWT의 고유 식별자. 주로 중복적인 처리를 방지하기 위해 사용하고 일회용 토큰에
사용하면 유용함
Claim
● Public Claim
○ 충돌이 방지된 (collision-resistant) 이름을 가지고 있어야 함
○ IANA JSON Web Token Registry에 등록되어 있는 이름을 사용함
○ 혹은 URI 형식으로 이름 지음
● Private Claim
○ JWT를 주고 받는 양 측 간에 (Server <-> Client) 협의 하에 사용되는 클레임 이름
○ Public Claim과는 달리 이름이 중복되어 충돌이 될 수 있으니 사용할 때 유의해야 함
Signature
● JWT의 Sender를 증명하고 내용이 변경되지 않았는지 확인함
● 헤더의 인코딩 값과 정보의 인코딩 값을 합친 후 주어진 비밀키(Secret)로
Hash를 해서 생성
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
사용처
● 인증
○ JWT 를 사용하는 가장 흔한 시나리오
○ 사용자가 로그인을 하면 서버는 사용자의 정보에 기반한 토큰을 발급해 전달함
○ 그 후 사용자가 서버에 요청을 할 때마다 JWT를 포함하여 전달하고 해당 토큰이 유효하고
인증됐는지 검증을 하고 사용자가 요청한 작업에 권한이 있는지 확인해 작업을 처리함
○ 세션을 유지할 필요가 없고 세션에 유지하는 정보를 JWT가 가지고 있어서 세션 관리가
필요없음
○ 다만 세션을 관리하지 않으니 중간에 만료시키기 어렵기 때문에 단기간 인증에 많이 사용함
○ Self-contain한 특성이 있기 때문에 민감한 정보를 담지 않도록 함
● 정보 교류
○ 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법
○ 정보가 signing 이 되어있기 때문에 정보를 보낸 이가 바뀌진 않았는지 또 정보가 도중에
조작되지는 않았는지 검증할 수 있음
Player API에서의 사용
● 문제
○ 이전 API는 API Key를 이용했기 때문에 보안적 이슈도 있고 값을 잘못 보내거나 변조할
위험성이 있었음
○ 들어오는 사람마다 인증키를 발급하고 이 키가 유효한지 관리하면, 즉 세션을 관리하면
트래픽이 증가할수록 시스템의 부하는 커짐
○ 특히 이 사람 중 일부는 아무것도 하지 않고 나감(재생과 관련한 로깅을 하긴 하지만 이
자체는 우리에게 크게 의미 없음). 즉, 세션의 대부분이 우리 비즈니스에 큰 의미가 없음
○ 대부분의 클립의 재생은 1시간 내에 끝나고 그 이상 머무른다면 크게 의미가 없음 (네이버
등에서는 특정 시간이 흐른 후에 재생해주지 않고 리프레시해야 함)
● 무엇이 필요한가?
○ 보안을 위해 인증은 반드시 필요함
○ 트래픽 증가에 따라 시스템의 부하가 함께 늘어나서 비용이 exponential하게 증가하면 안 됨
그래서 선택한 것이 JWT
참고자료
1. https://jwt.io/
2. https://velopert.com/2389

More Related Content

What's hot

[고숙한 세미나] 블록체인 취약점 분석
[고숙한 세미나] 블록체인 취약점 분석[고숙한 세미나] 블록체인 취약점 분석
[고숙한 세미나] 블록체인 취약점 분석Jung SunWook
 
블록체인 개요
블록체인 개요블록체인 개요
블록체인 개요Jeff Paik
 
3.고객을 연결하는 블록체인 (4차산업혁명: 고객과의 소통 신기술의 진화)
3.고객을 연결하는 블록체인 (4차산업혁명: 고객과의 소통 신기술의 진화)3.고객을 연결하는 블록체인 (4차산업혁명: 고객과의 소통 신기술의 진화)
3.고객을 연결하는 블록체인 (4차산업혁명: 고객과의 소통 신기술의 진화)doo rip choi
 
비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주석의 임
 
블록체인 한 번에 이해하기
블록체인 한 번에 이해하기블록체인 한 번에 이해하기
블록체인 한 번에 이해하기Myung Woon Oh
 
2. klaytn developer meetup #2 univ chain
2. klaytn developer meetup #2 univ chain2. klaytn developer meetup #2 univ chain
2. klaytn developer meetup #2 univ chain전 민규
 
블록체인(Block Chain)이란? - 블록체인의 구성요소, 작동원리, 메커니즘의 이해
블록체인(Block Chain)이란? - 블록체인의 구성요소, 작동원리, 메커니즘의 이해블록체인(Block Chain)이란? - 블록체인의 구성요소, 작동원리, 메커니즘의 이해
블록체인(Block Chain)이란? - 블록체인의 구성요소, 작동원리, 메커니즘의 이해용진 최
 
Bitcoin 기술분석 - 조남수
Bitcoin 기술분석 - 조남수Bitcoin 기술분석 - 조남수
Bitcoin 기술분석 - 조남수00heights
 
비트코인에 관한 교육자료 입니다.
비트코인에 관한 교육자료 입니다.비트코인에 관한 교육자료 입니다.
비트코인에 관한 교육자료 입니다.Sung Wan Yoon
 
비트코인 채굴과정
비트코인 채굴과정비트코인 채굴과정
비트코인 채굴과정Seong-Bok Lee
 
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)경록 박
 
짱 쉬운 블록체인
짱 쉬운 블록체인   짱 쉬운 블록체인
짱 쉬운 블록체인 JongKil Ahn
 
블록체인 What is Blockchain?
블록체인 What is Blockchain?블록체인 What is Blockchain?
블록체인 What is Blockchain?정식 황
 
Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Fermat Jade
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Wooseung Kim
 
이더리움 기초 스터디 (암호, 스토리지)
이더리움 기초 스터디 (암호, 스토리지)이더리움 기초 스터디 (암호, 스토리지)
이더리움 기초 스터디 (암호, 스토리지)Colin Chae
 
How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리SeokWon Kim
 

What's hot (20)

[고숙한 세미나] 블록체인 취약점 분석
[고숙한 세미나] 블록체인 취약점 분석[고숙한 세미나] 블록체인 취약점 분석
[고숙한 세미나] 블록체인 취약점 분석
 
블록체인 개요
블록체인 개요블록체인 개요
블록체인 개요
 
3.고객을 연결하는 블록체인 (4차산업혁명: 고객과의 소통 신기술의 진화)
3.고객을 연결하는 블록체인 (4차산업혁명: 고객과의 소통 신기술의 진화)3.고객을 연결하는 블록체인 (4차산업혁명: 고객과의 소통 신기술의 진화)
3.고객을 연결하는 블록체인 (4차산업혁명: 고객과의 소통 신기술의 진화)
 
비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주
 
블록체인 한 번에 이해하기
블록체인 한 번에 이해하기블록체인 한 번에 이해하기
블록체인 한 번에 이해하기
 
2. klaytn developer meetup #2 univ chain
2. klaytn developer meetup #2 univ chain2. klaytn developer meetup #2 univ chain
2. klaytn developer meetup #2 univ chain
 
블록체인(Block Chain)이란? - 블록체인의 구성요소, 작동원리, 메커니즘의 이해
블록체인(Block Chain)이란? - 블록체인의 구성요소, 작동원리, 메커니즘의 이해블록체인(Block Chain)이란? - 블록체인의 구성요소, 작동원리, 메커니즘의 이해
블록체인(Block Chain)이란? - 블록체인의 구성요소, 작동원리, 메커니즘의 이해
 
블록체인
블록체인블록체인
블록체인
 
Bitcoin 기술분석 - 조남수
Bitcoin 기술분석 - 조남수Bitcoin 기술분석 - 조남수
Bitcoin 기술분석 - 조남수
 
비트코인에 관한 교육자료 입니다.
비트코인에 관한 교육자료 입니다.비트코인에 관한 교육자료 입니다.
비트코인에 관한 교육자료 입니다.
 
비트코인 채굴과정
비트코인 채굴과정비트코인 채굴과정
비트코인 채굴과정
 
블록체인
블록체인블록체인
블록체인
 
블록체인 개요
블록체인 개요블록체인 개요
블록체인 개요
 
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
 
짱 쉬운 블록체인
짱 쉬운 블록체인   짱 쉬운 블록체인
짱 쉬운 블록체인
 
블록체인 What is Blockchain?
블록체인 What is Blockchain?블록체인 What is Blockchain?
블록체인 What is Blockchain?
 
Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)
 
이더리움 기초 스터디 (암호, 스토리지)
이더리움 기초 스터디 (암호, 스토리지)이더리움 기초 스터디 (암호, 스토리지)
이더리움 기초 스터디 (암호, 스토리지)
 
How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리
 

Similar to JWT (JSON web token)

웹 크롤링 (Web scraping) 의 이해
웹 크롤링 (Web scraping) 의 이해웹 크롤링 (Web scraping) 의 이해
웹 크롤링 (Web scraping) 의 이해2minchul
 
Block chain architecture and hyperledger fabric overview
Block chain architecture and hyperledger fabric overviewBlock chain architecture and hyperledger fabric overview
Block chain architecture and hyperledger fabric overview병준 김
 
20201217 ssl and http2
20201217 ssl and http220201217 ssl and http2
20201217 ssl and http2sonhyungsoo
 
모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호용호 최
 
Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상knight1128
 
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)용호 최
 
코어 이더리움
코어 이더리움 코어 이더리움
코어 이더리움 Jay JH Park
 
Open api개발을 위한 자료1
Open api개발을 위한 자료1Open api개발을 위한 자료1
Open api개발을 위한 자료1도성 김
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Manjong Han
 
블록체인과 암호화폐 그리고 악성코드
블록체인과 암호화폐 그리고 악성코드블록체인과 암호화폐 그리고 악성코드
블록체인과 암호화폐 그리고 악성코드Jeong-woo Park
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료ssuser776e2d
 
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험Clova Platform
 
100.RED HAT SINGLE SIGN-ON
100.RED HAT SINGLE SIGN-ON100.RED HAT SINGLE SIGN-ON
100.RED HAT SINGLE SIGN-ONOpennaru, inc.
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 
[블록체인 기업으로 가는 길] 2일차 블록체인 기술
[블록체인 기업으로 가는 길] 2일차 블록체인 기술[블록체인 기업으로 가는 길] 2일차 블록체인 기술
[블록체인 기업으로 가는 길] 2일차 블록체인 기술Jay Park
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 

Similar to JWT (JSON web token) (20)

웹 크롤링 (Web scraping) 의 이해
웹 크롤링 (Web scraping) 의 이해웹 크롤링 (Web scraping) 의 이해
웹 크롤링 (Web scraping) 의 이해
 
Block chain architecture and hyperledger fabric overview
Block chain architecture and hyperledger fabric overviewBlock chain architecture and hyperledger fabric overview
Block chain architecture and hyperledger fabric overview
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
20201217 ssl and http2
20201217 ssl and http220201217 ssl and http2
20201217 ssl and http2
 
모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호
 
Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상
 
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
 
코어 이더리움
코어 이더리움 코어 이더리움
코어 이더리움
 
Open api개발을 위한 자료1
Open api개발을 위한 자료1Open api개발을 위한 자료1
Open api개발을 위한 자료1
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
 
블록체인과 암호화폐 그리고 악성코드
블록체인과 암호화폐 그리고 악성코드블록체인과 암호화폐 그리고 악성코드
블록체인과 암호화폐 그리고 악성코드
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
 
100.RED HAT SINGLE SIGN-ON
100.RED HAT SINGLE SIGN-ON100.RED HAT SINGLE SIGN-ON
100.RED HAT SINGLE SIGN-ON
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 
[블록체인 기업으로 가는 길] 2일차 블록체인 기술
[블록체인 기업으로 가는 길] 2일차 블록체인 기술[블록체인 기업으로 가는 길] 2일차 블록체인 기술
[블록체인 기업으로 가는 길] 2일차 블록체인 기술
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 

More from Jinhyuck Kim

Reactive programming vs reactive systems
Reactive programming vs reactive systemsReactive programming vs reactive systems
Reactive programming vs reactive systemsJinhyuck Kim
 
V8 engine internal
V8 engine internalV8 engine internal
V8 engine internalJinhyuck Kim
 
[JS] Function.prototype.bind
[JS] Function.prototype.bind[JS] Function.prototype.bind
[JS] Function.prototype.bindJinhyuck Kim
 
기술 부채란
기술 부채란 기술 부채란
기술 부채란 Jinhyuck Kim
 

More from Jinhyuck Kim (6)

Reactive programming vs reactive systems
Reactive programming vs reactive systemsReactive programming vs reactive systems
Reactive programming vs reactive systems
 
Docker storage
Docker storageDocker storage
Docker storage
 
V8 engine internal
V8 engine internalV8 engine internal
V8 engine internal
 
[JS] Function.prototype.bind
[JS] Function.prototype.bind[JS] Function.prototype.bind
[JS] Function.prototype.bind
 
Serverless 101
Serverless 101Serverless 101
Serverless 101
 
기술 부채란
기술 부채란 기술 부채란
기술 부채란
 

JWT (JSON web token)

  • 1. JWT (JSON Web Token)
  • 2. ● 웹 표준 중 하나 - RFC 7519 ● 수많은 프로그래밍 언어에서 라이브러리를 지원함 ● 자가 수용적 (Self-contained) ● 쉽게 전달할 수 있음 주요 특징
  • 3. ● Header, Payload, Signature 로 구성되어 있고 각각을 순서대로 period(.) 으로 연결함 내용물 eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ2aWRlb0lkIjoiazFuTDBNb1FhQV Z4dzJtSzA2V040OWI4T1JsSmpwM0UiLCJ2ZXJzaW9uIjoiMS4wIiwiaWF0IjoxN TExOTUyMDM1LCJleHAiOjE1MTE5NTU2MzUsImF1ZCI6IntcIm1lZGlhSWRcIjp cIkwzQllYUHlwVjJXZThEOXdaSkExTTV3T3haYXJqZ2I2XCIsXCJ1c2VySWRcIj pcIldFQjpGSU5HRVJQTFVTOjkxMmY5NjA0LTE4MDYtNDZlNS1hMDNkLWRjZ WY4MDAxOTdmMVwifSIsImlzcyI6ImV4dC52aWRlby10YWcua3IiLCJzdWIiOiJ WSURFT3RhZyBBUEkgcGFnZS12aWV3IiwianRpIjoiZTYyYzM1NDgtYTgwZS0 0NTA5LWE2YTQtZTg4NDk1OWFkZTE5In0.qEWSfHfJxaqWMjilWaRaO5s0oQ vf_fDmSbDryDilAzTpeqmSOYNyBri1l1UoF_n7h_bvqE2issKB6Iy68_b7Ng Header Payload Signature
  • 4. Header ● Contents ○ typ - 토큰의 타입을 지정, JWT ○ alg - Hashing algorithm 지정 ■ HMAC SHA256/SHA512 혹은 RS256/512 가 사용 ■ 토큰을 검증할 때 사용되는 signature 부분에서 사용됨 ● URL encoding
  • 5. Payload ● Claim - Key Value Pair ● 이 Claim을 여러 개 넣을 수 있음 ● 여러 Claim을 URL Encoding ● Claim의 종류 ○ 등록된 (Reserved or Registered) ○ 공개 (Public) ○ 비공개 (Private)
  • 6. Claim ● Registered Claim - 서비스에서 필요한 정보가 아닌 토큰에 대한 정보를 담기 위해 이미 정해짐 ● 항목 ○ iss: issuer. 토큰 발급자 ○ sub: subject. 제목 ○ aud: audience. 대상자 ○ exp: expiration. 만료시간 ■ NumericDate 형식, epoch time (ms 단위 ) (예: 1480849147370) ○ nbf: not before. 이 시각이 지나기 전까지는 토큰이 처리되지 않음 ○ iat: issued at. 발급된 시간. Token의 Age 계산 ○ jti: JWT의 고유 식별자. 주로 중복적인 처리를 방지하기 위해 사용하고 일회용 토큰에 사용하면 유용함
  • 7. Claim ● Public Claim ○ 충돌이 방지된 (collision-resistant) 이름을 가지고 있어야 함 ○ IANA JSON Web Token Registry에 등록되어 있는 이름을 사용함 ○ 혹은 URI 형식으로 이름 지음 ● Private Claim ○ JWT를 주고 받는 양 측 간에 (Server <-> Client) 협의 하에 사용되는 클레임 이름 ○ Public Claim과는 달리 이름이 중복되어 충돌이 될 수 있으니 사용할 때 유의해야 함
  • 8. Signature ● JWT의 Sender를 증명하고 내용이 변경되지 않았는지 확인함 ● 헤더의 인코딩 값과 정보의 인코딩 값을 합친 후 주어진 비밀키(Secret)로 Hash를 해서 생성 HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
  • 9. 사용처 ● 인증 ○ JWT 를 사용하는 가장 흔한 시나리오 ○ 사용자가 로그인을 하면 서버는 사용자의 정보에 기반한 토큰을 발급해 전달함 ○ 그 후 사용자가 서버에 요청을 할 때마다 JWT를 포함하여 전달하고 해당 토큰이 유효하고 인증됐는지 검증을 하고 사용자가 요청한 작업에 권한이 있는지 확인해 작업을 처리함 ○ 세션을 유지할 필요가 없고 세션에 유지하는 정보를 JWT가 가지고 있어서 세션 관리가 필요없음 ○ 다만 세션을 관리하지 않으니 중간에 만료시키기 어렵기 때문에 단기간 인증에 많이 사용함 ○ Self-contain한 특성이 있기 때문에 민감한 정보를 담지 않도록 함 ● 정보 교류 ○ 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법 ○ 정보가 signing 이 되어있기 때문에 정보를 보낸 이가 바뀌진 않았는지 또 정보가 도중에 조작되지는 않았는지 검증할 수 있음
  • 10. Player API에서의 사용 ● 문제 ○ 이전 API는 API Key를 이용했기 때문에 보안적 이슈도 있고 값을 잘못 보내거나 변조할 위험성이 있었음 ○ 들어오는 사람마다 인증키를 발급하고 이 키가 유효한지 관리하면, 즉 세션을 관리하면 트래픽이 증가할수록 시스템의 부하는 커짐 ○ 특히 이 사람 중 일부는 아무것도 하지 않고 나감(재생과 관련한 로깅을 하긴 하지만 이 자체는 우리에게 크게 의미 없음). 즉, 세션의 대부분이 우리 비즈니스에 큰 의미가 없음 ○ 대부분의 클립의 재생은 1시간 내에 끝나고 그 이상 머무른다면 크게 의미가 없음 (네이버 등에서는 특정 시간이 흐른 후에 재생해주지 않고 리프레시해야 함) ● 무엇이 필요한가? ○ 보안을 위해 인증은 반드시 필요함 ○ 트래픽 증가에 따라 시스템의 부하가 함께 늘어나서 비용이 exponential하게 증가하면 안 됨 그래서 선택한 것이 JWT