JWT

https://velog.io/@yoju/%EC%9D%B8%EC%A6%9DAuthentication-%EC%9D%B8%EA%B0%80Authorization

JWT๋ž€ ๋ฌด์—‡์ผ๊นŒ?

JWT๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ HTTP Request Header์— ๋„ฃ์–ด ์ฃผ๋Š” JSON ํ† ํฐ์„ ๋งํ•œ๋‹ค. ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋Š” ๋ณ„๋„์˜ ์ธ์ฆ ๊ณผ์ • ์—†์ด ํ† ํฐ ์ •๋ณด๋งŒ์œผ๋กœ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

JWT๋Š” ์™œ ์‚ฌ์šฉํ• ๊นŒ?

๋ณด์•ˆ ์ด์Šˆ

  • ์ฟ ํ‚ค ๋˜๋Š” ์„ธ์…˜์„ ํƒˆ์ทจํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๋ณด์•ˆ ์ด์Šˆ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

  • JWT๋Š” ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, Cross-Origin Resource Sharing (CORS) ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฐ์ดํ„ฐ ์šฉ๋Ÿ‰

  • JWT๋Š” ๊ธฐ์กด์˜ XML๋ณด๋‹ค ๋œ ๋ณต์žกํ•˜๊ณ  ์ธ์ฝ”๋”ฉ ๋œ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘๋‹ค.

  • HTTP์™€ HTML ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์„ฑ

  • ์„œ๋ฒ„ ํ™•์žฅ์‹œ, ํ† ํฐ ์ •๋ณด๋งŒ ๊ณต์œ ํ•˜๋ฉด ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ์„œ๋ฒ„์—์„œ๋„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ™•์žฅ์„ฑ์— ์šฉ์ดํ•˜๋‹ค.

  • ํ† ํฐ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ์ธ์ฆ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ํ† ํฐ์— ํ•„์š”ํ•œ ๋ณ„๋„์˜ ์ €์žฅ์†Œ ๊ด€๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

OAuth๋Š” ๋ฌด์—‡์ด์ง€?

  • OAuth๋Š” Open Authorization, Open Authentication ๋œปํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(ํŽ˜์ด์Šค๋ถ,๊ตฌ๊ธ€,ํŠธ์œ„ํ„ฐ)(Service Provider)์˜ ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ Third party์•ฑ์— ์ œ๊ณต ์—†์ด ์ธ์ฆ,์ธ๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์Šคํƒ ๋‹ค๋“œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

  • OAuth ์ธ์ฆ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ API๋ฅผ ์œ ์ € ๋Œ€์‹ ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. OAuth๊ฐ€ ์‚ฌ์šฉ ๋˜๊ธฐ ์ „์—๋Š” ์™ธ๋ถ€ ์‚ฌ์ดํŠธ์™€ ์ธ์ฆ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๋™ํ•  ๋•Œ ์ธ์ฆ ๋ฐฉ์‹์˜ ํ‘œ์ค€์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ๊ธฐ๋ณธ ์ธ์ฆ์ธ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋Š”๋ฐ, ์ด๋Š” ๋ณด์•ˆ์ƒ ์ทจ์•ฝํ•œ ๊ตฌ์กฐ ์˜€๋‹ค. ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋…ธ์ถœ๋  ๊ฐ€๋ง์„ฑ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

JWT๋Š” OAuth๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋‚˜์˜ ๋„๊ตฌ ์ผ ๋ฟ์ด๋‹ค.

JWT๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด Payload์•ˆ์— ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„ ๊ฐ„์— ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— JWT๊ฐ€ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ฒƒ์ผ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๊ทธ๋กœ ์ธํ•ด ์‚ฌ๋žŒ๋“ค์ด ํ•˜๋Š” ์˜คํ•ด์ค‘์— ํ•˜๋‚˜๊ฐ€ Oauth๋Š” JWT์ด๋‹ค. ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์ ์ง€ ์•Š๋‹ค.

JWT๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ OAuth Token์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

OAuth token์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด token์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ„๋„์˜ ์ €์žฅ ๊ณต๊ฐ„์— ์ €์žฅํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์‹œ ์„œ๋ฒ„๋Š” ๋งค๋ฒˆ ํ† ํฐ ์ €์žฅ ๊ณต๊ฐ„์—์„œ ํ•„์š”ํ•œ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

https://bcho.tistory.com/999 [์กฐ๋Œ€ํ˜‘๋‹˜ ๋ธ”๋กœ๊ทธ์—์„œ ์ธ์šฉ]

JWT ๊ตฌ์กฐ

https://blog.kakaocdn.net/dn/dgmsn1/btqz4K9YW27/Qv25KQkx9nPSAQMkhsb3MK/img.png

ํ† ํฐ์˜ ํƒ€์ž…๊ณผ ํ•ด์‹œ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

payload

ํ† ํฐ์— ๋‹ด์„ ํด๋ ˆ์ž„(claim) ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. name-value ํ•œ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ณ , ์—ฌ๋Ÿฌ๊ฐœ์˜ ํด๋ ˆ์ž„ ๋“ค์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

signature

์„œ๋ช…(Signature)์€ ์œ„์—์„œ ๋งŒ๋“  ํ—ค๋”(Header)์™€ ํŽ˜์ด๋กœ๋“œ(Payload)์˜ ๊ฐ’์„ ๊ฐ๊ฐ BASE64๋กœ ์ธ์ฝ”๋”ฉํ•˜๊ณ , ์ธ์ฝ”๋”ฉํ•œ ๊ฐ’์„ ๋น„๋ฐ€ ํ‚ค๋ฅผ ์ด์šฉํ•ด ํ—ค๋”(Header)์—์„œ ์ •์˜ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด์‹ฑ์„ ํ•˜๊ณ , ์ด ๊ฐ’์„ ๋‹ค์‹œ BASE64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.

JWT๊ฐ€ ๋งŒ๋Šฅ์€ ์•„๋‹ˆ๋‹ค

  • ํŽ˜์ด๋กœ๋“œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ํ† ํฐ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • ํ† ํฐ์€ ํด๋ผ์ด์–ธํŠธ์— ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋ฏ€๋กœ ํ† ํฐ์— ๋Œ€ํ•œ ์œ„๋ณ€์กฐ ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ž์นซ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • JWT ํ† ํฐ์€ ๋ˆ„๊ตฌ๋‚˜ ๋ณตํ˜ธํ™” ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด๋กœ๋“œ์—๋Š” ๋ฏผ๊ฐ์ •๋ณด๋Š” ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค.

  • ํ† ํฐ์„ ๋งค ์š”์ฒญ์‹œ ์„œ๋ฒ„์— ์ „์†กํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ๋ณ„๋„๋กœ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

์ฐธ๊ณ 

Last updated