Skip to content

๐Ÿ”’ JWT (JSON Web Token)์ด๋ž€?ย #39

@mandoo1229

Description

@mandoo1229

์šฐ์„  ์šฐ๋ฆฌ๋Š” JWT ํ† ํฐ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด JWTํ† ํฐ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค.

๐Ÿ”‘ JWT

  • JWT(JSON Web Token)๋ž€ ์ธ์ฆ์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์•”ํ˜ธํ™”์‹œํ‚จ JSON ํ† ํฐ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  JWT๊ธฐ๋ฐ˜ ์ธ์ฆ์€ JWT ํ† ํฐ(Access Token)์„ HTTPํ—ค๋”์— ์‹ค์–ด ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • JWT JSON ๋ฐ์ดํ„ฐ๋ฅผ Base64 URL -safe Encode๋ฅผ ํ†ตํ•ด ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ง๋ ฌํ™”ํ•œ ๊ฒƒ์ด๋ฉฐ, ํ† ํฐ ๋‚ด๋ถ€์—๋Š” ์œ„๋ณ€์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๊ฐœ์ธํฌ๋ฅผ ํ†ตํ•œ ์ „์ž์„œ๋ช…๋„ ๋“ค์–ด์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ JWT๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์„œ๋ช…์„ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉฐ ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ์š”์ฒญํ•œ ์‘๋‹ต์„ ๋Œ๋ ค์ค€๋‹ค.
  • Base64 URL -safe Encode๋Š” ์ผ๋ฐ˜์ ์ธ Base64 Encode์—์„œ URL์—์„œ ์˜ค๋ฅ˜์—†์ด ์‚ฌ์šฉํ•˜๋„๋ก +, /๋ฅผ ๊ฐ๊ฐ -, _ ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

๐Ÿ”‘JWT ๊ตฌ์กฐ

JWT๋Š” .์„ ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์„ธ ๊ฐ€์ง€ ๋ฌธ์ž์—ด์˜ ์กฐํ•ฉ์ด๋‹ค.
.์„ ๊ธฐ์ค€์œผ๋กœ ์ขŒ์ธก๋ถ€ํ„ฐ Header, Payload, Signature์„ ์˜๋ฏธํ•œ๋‹ค.


แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-07-03 แ„‹แ…ฉแ„’แ…ฎ 12 23 03


Header์—๋Š” JWT์—์„œ ์‚ฌ์šฉํ•  ํƒ€์ž…๊ณผ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ด๊ฒจ ์žˆ์œผ๋ฉฐ, Payload๋Š” ์„œ๋ฒ„์—์„œ ์ฒจ๋ถ€ํ•œ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์ •๋ณด์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค. Signature์—๋Š” Header, Payload๋ฅผ Base64 URL -safe Encode๋ฅผ ํ•œ ์ดํ›„ Header์— ๋ช…์‹œ๋œ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ณ , ๊ฐœ์ธํ‚ค(Private Key)๋กœ ์„œ๋ช…ํ•œ ์ „์ž์„œ๋ช…์ด ๋‹ด๊ฒจ ์žˆ๋‹ค.

๐Ÿ”‘ JWT ์ธ์ฆ๊ณผ์ •

  • ์‚ฌ์šฉ์ž๊ฐ€ ID, PW๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ์ธ์ฆ์„ ์š”์ฒญํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ธ์ฆ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด, Header,. PayLoad, Signature๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • Header, PayLoad, Signature๋ฅผ ๊ฐ๊ฐ Base64๋กœ ํ•œ ๋ฒˆ ๋” ์•”ํ˜ธํ™”ํ•˜์—ฌ JWT๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ JWT๋ฅผ localStorage ์ €์žฅํ•œ๋‹ค. (์ฟ ํ‚ค๋‚˜ ๋‹ค๋ฅธ ๊ณณ์—๋„ ์ €์žฅ ๊ฐ€๋Šฅ ๋ณดํ†ต localStorage์— ์ €์žฅ์„ ํ•œ๋‹ค. )
  • API๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ Authorization header์— AccessToken์„ ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ํ•  ์ผ์€ ํด๋ผ์ด๋„ˆํŠธ๊ฐ€ Header์— ๋‹ด์•„์„œ ๋ณด๋‚ธ JWT๊ฐ€ ๋‚ด ์„œ๋ฒ„์—์„œ ๋ฐœํ–‰ํ•œ ํ† ํฐ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ ์ผ์ฐจํ•œ๋‹ค๋ฉด ์ธ์ฆ์„ ํ†ต๊ณผ์‹œ์ผœ์ฃผ๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด ๋œ๋‹ค. ์ธ์ฆ์ด ํ†ต๊ณผ๋˜์—ˆ์œผ๋ฉด ํŽ˜์ด๋กœ๋“œ์— ๋“ค์–ด์žˆ๋Š” ์œ ์ €์˜ ์ •๋ณด๋“ค์„ selectํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋Œ๋ ค์ค€๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ–ˆ๋Š”๋ฐ, ๋งŒ์ผ AccessToken์˜ ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” RefreshToken์„ ์ด์šฉํ•ด์„œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์—‘์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions