jwt

  • Json Web Token의 μ€„μž„λ§

  • μ„Έμ…˜ λŒ€μ‹ μ— νšŒμ› μΈμ¦μ—μ„œ 주둜 μ‚¬μš©λ˜λ©° μ–΄λ–€ 정보λ₯Ό μ£Όκ³  받을 λ•Œλ„ μ‚¬μš©ν•˜λŠ” λ“―.

JWT κ΅¬μ„±μš”μ†Œ

  • . 을 κ΅¬λΆ„μžλ‘œ 3가지 λ¬Έμžμ—΄λ‘œ κ΅¬μ„±λ˜μ–΄μžˆμŒ.

  • [헀더header].[λ‚΄μš©payload].[μ„œλͺ…signature]

  • 헀더

    • alg, typ 두가지 정보λ₯Ό 가지고 있음.

    • alg : ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜μ„ 말함.

    • typ : 토큰 νƒ€μž…

  • λ‚΄μš©

    • 정보듀이 λ“€μ–΄κ°€ μžˆλŠ” λΆ€λΆ„.

    • 보톡 claim 이라 λΆ€λ₯Έλ‹€.

    • name, value ν•œ 쌍으둜 이루어져 있음.

    • ν΄λ ˆμž„μ€, registered, public, private ν΄λ ˆμž„μœΌλ‘œ 이루어져 있음.

ν΄λ ˆμž„

λ“±λ‘λœ ν΄λ ˆμž„

  • 토큰에 λ‹΄κΈ°λŠ” μ •λ³΄λ“€μ˜ 이름name이 이미 정해진 ν΄λ ˆμž„.

  • μ΄λŸ¬ν•œ 정해진 ν΄λ ˆμž„μ„ μ‚¬μš©ν•˜λŠ” 것은 κ°œλ°œμžκ°€ μ„ νƒν•˜λ©΄ 됨.

  • μ˜ˆμ‹œ

iss: 토큰 λ°œκΈ‰μž (issuer)
sub: 토큰 제λͺ© (subject)
aud: 토큰 λŒ€μƒμž (audience)
exp: ν† ν°μ˜ λ§Œλ£Œμ‹œκ°„ (expiraton), μ‹œκ°„μ€ NumericDate ν˜•μ‹μœΌλ‘œ λ˜μ–΄μžˆμ–΄μ•Ό ν•˜λ©° (예: 1480849147370) μ–Έμ œλ‚˜ ν˜„μž¬ μ‹œκ°„λ³΄λ‹€ μ΄ν›„λ‘œ μ„€μ •λ˜μ–΄μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.
nbf: Not Before λ₯Ό μ˜λ―Έν•˜λ©°, ν† ν°μ˜ ν™œμ„± λ‚ μ§œμ™€ λΉ„μŠ·ν•œ κ°œλ…μž…λ‹ˆλ‹€. 여기에도 NumericDate ν˜•μ‹μœΌλ‘œ λ‚ μ§œλ₯Ό μ§€μ •ν•˜λ©°, 이 λ‚ μ§œκ°€ μ§€λ‚˜κΈ° μ „κΉŒμ§€λŠ” 토큰이 μ²˜λ¦¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
iat: 토큰이 λ°œκΈ‰λœ μ‹œκ°„ (issued at), 이 값을 μ‚¬μš©ν•˜μ—¬ ν† ν°μ˜ age κ°€ μ–Όλ§ˆλ‚˜ λ˜μ—ˆλŠ”μ§€ νŒλ‹¨ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
jti: JWT의 고유 μ‹λ³„μžλ‘œμ„œ, 주둜 쀑볡적인 처리λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•˜μ—¬ μ‚¬μš©λ©λ‹ˆλ‹€. 일회용 토큰에 μ‚¬μš©ν•˜λ©΄ μœ μš©ν•©λ‹ˆλ‹€.

곡개 ν΄λ ˆμž„

  • URI ν˜•μ‹μœΌλ‘œ 이름이 지어진 ν΄λ ˆμž„

  • μ™œ? 좩돌 방지λ₯Ό μœ„ν•΄.

  • μ˜ˆμ‹œ : "https://velopert.com/jwt_claims/is_admin": true

λΉ„κ³΅κ°œ ν΄λ ˆμž„

  • λ“±λ‘λœ, 곡개된 ν΄λ ˆμž„λ„ μ•„λ‹Œ, μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 사이에 ν˜‘μ˜μ— μ˜ν•΄μ„œ μ‚¬μš©λ˜λŠ” ν΄λ ˆμž„ 이름을 말함

  • μ•„λ§ˆλ„ 이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” 이 ν΄λ ˆμž„ ν•˜λ‚˜λ§Œμ„ μ‚¬μš©ν•˜λ©΄ 될듯.

μ„œλͺ…

  • μ„œλͺ…은 ν—€λ”μ˜ 인코딩값과 μ •λ³΄μ˜ 인코딩 값을 ν•©μΉœ ν›„, λΉ„λ°€ν‚€λ‘œ ν•΄μ‰¬ν•˜μ—¬ 생성

μžλ°”μ—μ„œ JWT 생성과 검증 κ³Όμ •

  1. μ–΄λ–€ ν΄λ ˆμž„λ“€(claim)을 μ‚¬μš©ν•  지 μ •ν•˜κ³ , JWT 토큰 생성

  2. JWTλ₯Ό μ•”ν˜Έν™”(signWith) μ„œλͺ…ν•˜μ—¬ JWSλ₯Ό λ§Œλ“¬.

  • μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν• κ²ƒμΈμ§€λ„ μ •ν•΄μ•Όν•˜κ³ 

  1. JWT μ••μΆ•(compact)

μ£Όμ˜ν•΄μ•Όν•  점

  • ν† ν°μ—λŠ” λ―Όκ°ν•œ 정보λ₯Ό μ €μž₯ν•˜λ©΄ μ•ˆλ¨.

  • μ™œ? 변쑰에 κ°•ν•œ 것이지, λ³΄μ•ˆμ— κ°•ν•œ 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ—

  • 이λ₯Ό μœ„ν•΄μ„œ, μœ νš¨κΈ°κ°„, 생성기간, κΆŒν•œλ“±μ„ μ„€μ •ν•˜λŠ” 것.

μ°Έκ³ 

  • https://jwt.io/

  • https://velopert.com/2389

  • https://medium.com/@OutOfBedlam/jwt-%EC%9E%90%EB%B0%94-%EA%B0%80%EC%9D%B4%EB%93%9C-53ccd7b2ba10

Last updated