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

Was this helpful?