728x90

μ°Έκ³ 

더보기

 

 

JWT (JSON Web Token) μ΄ν•΄ν•˜κΈ°μ™€ ν™œμš© λ°©μ•ˆ - Opennaru, Inc.

JWT λŠ” JSON Web Token의 μ•½μžλ‘œ μ „μž μ„œλͺ… 된 URL-safe (URL둜 μ΄μš©ν•  μˆ˜μžˆλŠ” 문자 만 κ΅¬μ„±λœ)의 JSONμž…λ‹ˆλ‹€.JWTλŠ” 속성 정보 (Claim)λ₯Ό JSON 데이터 ꡬ쑰둜 ν‘œν˜„ν•œ ν† ν°μœΌλ‘œ RFC7519 ν‘œμ€€ μž…λ‹ˆλ‹€.

www.opennaru.com

 

 

[JWT] 토큰(Token) 기반 인증에 λŒ€ν•œ μ†Œκ°œ | VELOPERT.LOG

μ†Œκ°œ 토큰(Token) 기반 인증은 λͺ¨λ˜ μ›Ήμ„œλΉ„μŠ€μ—μ„œ 정말 많이 μ‚¬μš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ΄ API λ₯Ό μ‚¬μš©ν•˜λŠ” μ›Ήμ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•œλ‹€λ©΄, 토큰을 μ‚¬μš©ν•˜μ—¬ μœ μ €λ“€μ˜ μΈμ¦μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ”κ²ƒμ΄ κ°€μž₯ 쒋은

velopert.com

 

 

[Server] JWT(Json Web Token)λž€?

ν˜„λŒ€ μ›Ήμ„œλΉ„μŠ€μ—μ„œλŠ” 토큰을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ“€μ˜ 인증 μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 것이 κ°€μž₯ 쒋은 방법이닀. μ΄λ²ˆμ—λŠ” 토큰 기반의 인증 μ‹œμŠ€ν…œμ—μ„œ 주둜 μ‚¬μš©ν•˜λŠ” JWT(Json Web Token)에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜

mangkyu.tistory.com

 

μ„Έμ…˜ 기반 인증과 토큰 기반 인증 비ꡐ

μ„Έμ…˜ 인증 토큰 인증
정보λ₯Ό μ„œλ²„μ— μ €μž₯ 정보λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯
ν™•μž₯μ„± X
- μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„ (λΆ„μ‚° μ„œλ²„)λ₯Ό μ‚¬μš©ν•  경우, μ„œλ²„ λ©”λͺ¨λ¦¬μ— μ„Έμ…˜μ„ μ €μž₯ν•˜λ©΄ κ·Έ 정보λ₯Ό κ³΅μœ ν•˜λŠ” 데 λ³΅μž‘ν•œ 섀계가 ν•„μš”ν•˜λ‹€.
- λ©”λͺ¨λ¦¬ μ €μž₯이든 DB μ €μž₯이든 μœ μ € μˆ˜μ— 따라 κ³ΌλΆ€ν•˜ κ°€λŠ₯성이 μžˆλ‹€.
stateless -> ν™•μž₯μ„± O
- scalability: ν† ν°μ˜ 유효 검증 및 정보 μΆ”μΆœμ€ λͺ¨λ“  μ„œλ²„μ—μ„œ λ™μΌν•˜κ²Œ κ°€λŠ₯ν•˜λ‹€.
- extensibility: 토큰에 선택적 κΆŒν•œλ§Œ λΆ€μ—¬ν•˜μ—¬ 둜그인 정보λ₯Ό μ‚¬μš©ν•˜λŠ” λΆ„μ•Όλ₯Ό ν™•μž₯ν•  수 μžˆλ‹€.

 

 

 

토큰 기반 μ‹œμŠ€ν…œ μž‘λ™ 원리

 

 

 

JWT, JWS, JWE

JWT

RFC7519ν‘œμ€€μΈ JSON Web Token은, 속성 정보( Claim)λ₯Ό json 포맷으둜 ν‘œν˜„ν•œ 토큰이닀.

ν΄λΌμ΄μ–ΈνŠΈλŠ” HTTP Request Header에 μ„œλ²„λ‘œλΆ€ν„° 받은 토큰을 λ„£μœΌλ©°, μ„œλ²„λŠ” Header에 ν¬ν•¨λœ JWT 정보λ₯Ό 톡해 μΈμ¦ν•œλ‹€.

μ‚¬μš©λ˜λŠ” json λ°μ΄ν„°λŠ” URL-Safe( =url둜 μ΄μš©ν•  수 μžˆλŠ” 문자둜 κ΅¬μ„±λœ )ν•˜λ‹€.

JWTλŠ” HMAC μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ λΉ„λ°€ν‚€ λ˜λŠ” Pub/Pri Key 쌍으둜 μ„œλͺ… κ°€λŠ₯ν•˜λ‹€.

JWS

JSON Web SignatureλŠ” json μ „μž μ„œλͺ…을 ν•œ λ’€  url-safe λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•œ μ„œλͺ… ν‘œμ€€μ΄λ‹€. (RFC7515)

JWE

JSON Web Encryption은 json ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λŠ” μ•”ν˜Έν™” 방법이닀. (RFC7516)

 

 

 

JWT의 ꡬ쑰와 νŠΉμ§•

Header.Payload.Signature 와 같이 μ„Έ λΆ€λΆ„μœΌλ‘œ 이루어지며, 각 뢀뢄은 μΈμ½”λ”©λœ JSONν˜•νƒœλ‘œ ν‘œν˜„ν•œλ‹€.

 

Header

ν† ν°μ˜ νƒ€μž…μ„ μ§€μ •ν•˜λŠ” typ, μ‹œκ·Έλ‹ˆμ²˜ ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜μ„ μ§€μ •ν•˜λŠ” alg 두 가지 μ •λ³΄λ‘œ ꡬ성

 

Payload

ν† ν°μ—μ„œ μ‚¬μš©ν•˜λŠ” 속성(Claim)을 μ €μž₯. Jsonν˜•νƒœλ‘œ 정보λ₯Ό 넣을 수 있으며 3 μ’…λ₯˜κ°€ μžˆλ‹€.

Registered Claim: 토큰 정보 ν‘œν˜„μ„ μœ„ν•œ μ •ν•΄μ§„ μ’…λ₯˜μ˜ 데이터. ex) λ°œκΈ‰μž, λ§Œλ£Œμ‹œκ°„, ν† ν°μ‹λ³„μž...

Public Claim: 곡개용 정보λ₯Ό μœ„ν•œ μ‚¬μš©μž μ •μ˜ ν΄λ ˆμž„. URI 포맷을 μ‚¬μš©ν•œλ‹€.

Private Claim: C/S κ°„ μ‚¬μš©ν•  μž„μ˜μ˜ 정보λ₯Ό μ €μž₯ν•˜λŠ” μ‚¬μš©μž μ •μ˜ ν΄λ ˆμž„

 

Signature 

토큰 인코딩 λ˜λŠ” μœ νš¨μ„± 검증 μ‹œ μ‚¬μš©ν•˜λŠ” κ³ μœ ν•œ μ•”ν˜Έν™” μ½”λ“œ

Header와 Payloadλ₯Ό 인코딩/ν•΄μ‹±ν•˜μ—¬ 생성

 

 

JWTλŠ” 토큰 μžμ²΄μ— μ‚¬μš©μž κ΄€λ ¨ 정보λ₯Ό 담을 수 μžˆλ‹€.

:) μ‚¬μš©μž 정보 처리 μ‹œ ν† ν°λ§Œ 있으면 됨

 

JWTλŠ” Statelessν•˜λ‹€.

λ”°λΌμ„œ 토큰을 μž„μ˜λ‘œ μ‚­μ œν•˜κ±°λ‚˜, λ‚΄λΆ€μ˜ μ‚¬μš©μž 정보λ₯Ό μ„œλ²„μ—μ„œ μˆ˜μ •ν•  수 μ—†λ‹€. 관리λ₯Ό μœ„ν•΄ 토큰 만료 μ‹œκ°„μ„ λ°˜λ“œμ‹œ 지정해야 ν•œλ‹€.

 

 

 

 

728x90

+ Recent posts