Posts authentication-jwt
Post
Cancel

authentication-jwt

authentication(JWT)


πŸ’Ώ jwt

ꡬ쑰

  • WTλŠ” Header, Payload, Signature의 3 λΆ€λΆ„μœΌλ‘œ 이루어지며, Json ν˜•νƒœμΈ 각 뢀뢄은 Base64둜 인코딩 λ˜μ–΄ ν‘œν˜„λœλ‹€.
  • 각각의 뢀뢄을 이어 μ£ΌκΈ° μœ„ν•΄ . κ΅¬λΆ„μžλ₯Ό μ‚¬μš©
  • Base64λŠ” μ•”ν˜Έν™”λœ λ¬Έμžμ—΄μ΄ μ•„λ‹ˆκ³ , 같은 λ¬Έμžμ—΄μ— λŒ€ν•΄ 항상 같은 인코딩 λ¬Έμžμ—΄μ„ λ°˜ν™˜(즉 μ•”ν˜Έν™” μ•ˆλ˜μžˆμ–΄μ„œ κ³΅κ°œλ˜μ–΄μžˆλ‹€.)

  • Header(헀더)
    • typ 와 alg 두가지 μ •λ³΄λ‘œ ꡬ성(Signatureλ₯Ό ν•΄μ‹±ν•˜κΈ° μœ„ν•œ μ•Œκ³ λ¦¬μ¦˜ 지정)
      • typ: ν† ν°μ˜ νƒ€μž… 지정(JWT)
      • alg: μ•Œκ³ λ¦¬μ¦˜ λ°©μ‹μ„μ§€μ •ν•˜λ©° μ„œλͺ…(signature) 및 토큰 검증에 μ‚¬μš©
  • payload(νŽ˜μ΄λ‘œλ“œ)
    • ν† ν°μ—μ„œ μ‚¬μš©ν•  μ •λ³΄μ˜ 쑰각(Claim)이 λ‹΄κ²¨μžˆμŒ
    • Registered Claim(λ“±λ‘λœ ν΄λ ˆμž„): 토큰 정보λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄ 이미 정해진 μ’…λ₯˜μ˜ λ°μ΄ν„°λ‘œ ꡬ성
      • iss: 토큰 λ°œκΈ‰μž(issuer)
      • sub: 토큰 제λͺ©(subject)
      • aud: 토큰 λŒ€μƒμž(audience)
      • exp: 토큰 λ§Œλ£Œμ‹œκ°„(NumericDate ν˜•μ‹)
      • nbf: 토큰 ν™œμ„± λ‚ μ§œ(not before) 이 λ‚ μ˜ μ§€λ‚˜κΈ° μ „μ˜ 토큰은 ν™œμ„±ν™” μ•ˆλ¨
      • iat: 토큰 λ°œκΈ‰ μ‹œκ°„(issedat) 토큰 λ°œκΈ‰ μ΄ν›„μ˜ κ²½κ³Ό μ‹œκ°„
      • jti: 토큰 μ‹λ³„μž(jwt id) 쀑볡 방지λ₯Ό μœ„ν•΄ μ‚¬μš©ν•˜λ©° 일회용 토큰 등에 μ‚¬μš©
    • Public Claim(곡개 ν΄λ ˆμž„): μ‚¬μš©μž μ •μ˜ ν΄λ ˆμž„μœΌλ‘œ, 곡개용 정보λ₯Ό μœ„ν•΄ μ‚¬μš©(좩돌 방지λ₯Ό μœ„ν•΄ URI 포맷)
    • Private Claim(λΉ„κ³΅κ°œ ν΄λ ˆμž„): μ‚¬μš©μž μ •μ˜ ν΄λ ˆμž„μœΌλ‘œ, μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 사이에 μž„μ˜λ‘œ μ§€μ •ν•œ 정보λ₯Ό μ €μž₯
      • token typeμ΄λ‚˜ username λ“±λ“±
  • Signature(μ„œλͺ…): 토큰을 μΈμ½”λ”©ν•˜κ±°λ‚˜ μœ νš¨μ„± 검증을 ν•  λ•Œ μ‚¬μš©ν•˜λŠ” κ³ μœ ν•œ μ•”ν˜Έν™” μ½”λ“œ
    • 헀더(Header)와 νŽ˜μ΄λ‘œλ“œ(Payload)의 값을 각각 BASE64둜 인코딩
    • λΉ„λ°€ν‚€λ₯Ό μ΄μš©ν•΄ 헀더에 μ •μ˜ν•œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ ν•΄μ‹±, 이 값을 λ‹€μ‹œ BASE64둜 인코딩

고렀사항

  • Self-contained: 토큰 μžμ²΄μ— 정보λ₯Ό λ‹΄κ³  μžˆμœΌλ―€λ‘œ μ–‘λ‚ μ˜ 검이 될 수 μžˆλ‹€.
  • 토큰 길이: ν† ν°μ˜ νŽ˜μ΄λ‘œλ“œ(Payload)에 3μ’…λ₯˜μ˜ ν΄λ ˆμž„μ„ μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ—, 정보가 λ§Žμ•„μ§ˆμˆ˜λ‘ ν† ν°μ˜ 길이가 λŠ˜μ–΄λ‚˜ λ„€νŠΈμ›Œν¬μ— λΆ€ν•˜λ₯Ό 쀄 수 μžˆλ‹€.
  • Payload 인코딩: νŽ˜μ΄λ‘œλ“œ(Payload) μžμ²΄λŠ” μ•”ν˜Έν™” 된 것이 μ•„λ‹ˆλΌ, BASE64둜 인코딩 된 것이닀. 쀑간에 Payloadλ₯Ό νƒˆμ·¨ν•˜μ—¬ λ””μ½”λ”©ν•˜λ©΄ 데이터λ₯Ό λ³Ό 수 μžˆμœΌλ―€λ‘œ, JWE둜 μ•”ν˜Έν™”ν•˜κ±°λ‚˜ Payload에 μ€‘μš” 데이터λ₯Ό 넣지 μ•Šμ•„μ•Ό ν•œλ‹€.
  • Stateless: JWTλŠ” μƒνƒœλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ν•œλ²ˆ λ§Œλ“€μ–΄μ§€λ©΄ μ œμ–΄κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€. 즉, 토큰을 μž„μ˜λ‘œ μ‚­μ œν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ 토큰 만료 μ‹œκ°„μ„ κΌ­ λ„£μ–΄μ£Όμ–΄μ•Ό ν•œλ‹€.
  • Tore Token: 토큰은 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ 관리해야 ν•˜κΈ° λ•Œλ¬Έμ—, 토큰을 μ €μž₯ν•΄μ•Ό ν•œλ‹€.
This post is licensed under CC BY 4.0 by the author.

SIY Spring Cloud Eureka

Network-AMQP