๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DEV

์ธ์ฆ(Authentication) & ์ธ๊ฐ€(Authorization)

by camille: 2024. 10. 20.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“• ์ธ์ฆ์€ ์™œ ํ•„์š”ํ•œ๊ฐ€?

  • ์šฐ๋ฆฌ ์„œ๋น„์Šค๋ฅผ ๋ˆ„๊ฐ€ ์“ฐ๋ฉฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€, ์ถ”์ ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•˜๋‹ค.
  • ์ธ์ฆ์ด ํ•„์š”ํ•œ ๊ฒƒ๋“ค์€ id, email, pw ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.
  • ๊ทธ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ password๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ๋ฒ•์€ ๊ฐœ์ธ์ •๋ณด์˜ ์•”ํ˜ธํ™”์— ๋Œ€ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทœ์ •ํ•˜๊ณ  ์žˆ๋‹ค.
: ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋ฐ”์ด์˜ค์ •๋ณด, ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ ๋“ฑ๊ณผ ๊ฐ™์€ ์ฃผ์š” ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์•”ํ˜ธํ™” ๋˜์ง€ ์•Š๊ณ , ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ์‹œ์Šคํ…œ์— ์ €์žฅ๋˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ์ „์†ก ๋  ๊ฒฝ์šฐ, ๋…ธ์ถœ ๋ฐ ์œ„ใ†๋ณ€์กฐ ๋“ฑ์˜ ์œ„ํ—˜์ด ์žˆ์œผ๋ฏ€๋กœ ์•”ํ˜ธํ™” ๋“ฑ์˜ ์•ˆ์ „ํ•œ ๋ณดํ˜ธ์น˜๊ฐ€ ์ œ๊ณต๋˜์–ด์•ผ ํ•œ๋‹ค.
"์•”ํ˜ธํ™”"๋Š” ๊ฐœ์ธ์ •๋ณด ์ทจ๊ธ‰์ž์˜ ์‹ค์ˆ˜ ๋˜๋Š” ํ•ด์ปค์˜ ๊ณต๊ฒฉ์œผ๋กœ ๋“ฑ์œผ๋กœ ์ธํ•ด ๊ฐœ์ธ์ •๋ณด๊ฐ€ ๋น„์ธ๊ฐ€์ž์—๊ฒŒ ์œ ใ†๋…ธ์ถœ ๋˜๋”๋ผ๋„ ๊ทธ ๋‚ด์šฉ ํ™•์ธ์„ ์–ด๋ ต๊ฒŒ ํ•˜๋Š” ๋ณด์•ˆ๊ธฐ์ˆ ์ด๋‹ค. ์ฆ‰, ์‹œ์Šคํ…œ์ด ์ธํ„ฐ๋„ท์—์„œ ๋„คํŠธ์›Œํฌ์— ์œ„์น˜ํ•˜๋Š” ๊ฒฝ์šฐ๋‚˜ ์˜ˆ์™ธ์ ์ธ ๊ฐœ์ธ์ •๋ณด ํ•ญ๋ชฉ์„ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ตญ๊ฐ€์—์„œ ๊ถŒ๊ณ ํ•˜๋Š” ์ƒ์šฉ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ๊ฐœ์ธ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋„๋ก ๋ฒ•์ ์œผ๋กœ ์š”๊ตฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

  • Database์— ์ €์žฅ ์‹œ ๊ฐœ์ธ ์ •๋ณด๋ฅผ ํ•ด์‹ฑํ•˜์—ฌ ๋ณต์›ํ•  ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.

    ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์•ˆ์— id pkํ‚ค๊ฐ€ ์žˆ๊ณ  ๊ฐ๊ฐ์˜ ์นผ๋Ÿผ๋“ค์ด ์žˆ๋Š”๋ฐ, ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋ฉด ์ €์žฅ์ด ๋  ๋•Œ ์•”ํ˜ธํ™” ํ•ด์„œ ์˜ค๋ฅธ์ชฝ ์ฒ˜๋Ÿผ ์ €์žฅ์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์•”ํ˜ธํ™” ํ•˜์ง€ ์•Š๊ณ  ์ €์žฅ์„ ํ•˜๋ฉด, ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋“ค์–ด ๋‚  ์ˆ˜ ์žˆ๋Š” ์šฐ๋ ค๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„๊ฐ€ ๋˜์–ด์žˆ๋‹ค.

๋™์‹ ์‹œ ๊ฐœ์ธ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ, SSL์„ ์ ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™” https ๋ณด์•ˆ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋‹จ์ฒด๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ฐ›๋Š” ์‚ฌ๋žŒ๊ณผ ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ๋งŒ ํ•ด๋…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฐœ์ธ์ •๋ณด๋ฅผ ํ•ด์‹ฑ ํ•˜์—ฌ ๋ณต์› ํ•  ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.

๐Ÿ“• ์•”ํ˜ธํ™”๋Š” ์–ด๋–ป๊ฒŒ ํ• ๊นŒ์š”?

๐Ÿ“Œ ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ๋ผ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ผ๊นŒ?

  • ๋ณธ๋ž˜ ํ•ด์‰ฌ(hash)ํ•จ์ˆ˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋น ๋ฅธ ์ž๋ฃŒ์˜ ๊ฒ€์ƒ‰, ๋ฐ์ดํ„ฐ์˜ ์œ„๋ณ€์กฐ ์ฒดํฌ๋ฅผ ์œ„ํ•ด์„œ ์“ฐ์ด์ง€๋งŒ, ๋ณต์›์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌํ•จ์ˆ˜๋Š” ์•”ํ˜ธํ™”์  ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  • (MDS, SHA-1)(๋‘˜์€ ๋ณด์•ˆ์ทจ์•ฝ), SHA-256๋“ฑ์ด ์žˆ๋‹ค.
  • '1234'๋ฅผ SHA0256 ํ•ด์‹ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    :03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
  • ๊ฒฐ๊ณผ๋งŒ ๋ด์„œ๋Š” ๋‹น์žฅ ์‹๋ณ„์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋ฏ€๋กœ ์™„๋ฒฝํ•ด ๋ณด์ธ๋‹ค.
  • ํ•˜์ง€๋งŒ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ '1234'๋ฅผ ๋‹ค์‹œ ํ•ด์‹ฑํ•˜๋ฉด ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ถœ๋œ๋‹ค.
  • ์ฆ‰ ๋ณต์›์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ํ•œ์ชฝ์œผ๋กœ๋Š” ์•”ํ˜ธํ™”๊ฐ€ ๋˜๋Š”๋ฐ ๋‹ค๋ฅธ ํ•œ์ชฝ์—์„œ๋Š” ์•”ํ˜ธํ™”๊ฐ€ ์•ˆ๋˜๋Š” ํ•ด์‰ฌ๋กœ ์•”ํ˜ธํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
  • ์ด์™€๊ฐ™์€ ํ—ˆ์ ์„ ์ด์šฉํ•ด์„œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ํŒ๋งคํ•˜๋Š” ์„œ๋น„์Šค์ธ ๋ ˆ์ธ๋ณด์šฐ ํ…Œ์ด๋ธ”์ด๋ผ๋Š” ์‚ฌ์ดํŠธ๋„ ์กด์žฌํ•œ๋‹ค.List of Rainbow Tables
  • ์ด๊ฐ™์€ ํ—ˆ์ ์„ ๋ณด์™„ํ•˜๊ณ ์ž salting๊ณผ Key Stretching์ด๋ผ๋Š” ์•„์ด๋””์–ด๊ฐ€ ์ƒ๊ฒจ๋‚ฌ๋Š”๋ฐ, ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ž„์˜๋กœ ์ƒ์„ฑํ•œ ๋ฌธ์ž์—ด(Salt)๋ฅผ ํ•ฉ์ณ์„œ ํ•ด์‹ฑํ•˜์—ฌ ์ด ํ•ด์‹œ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์•”ํ˜ธ๋Š” ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋กœ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•”ํ˜ธ๋ผ๋Š” ๊ฒƒ์€ ๋ฐฑํผ์„ผํŠธ๋กœ ๋ชป์ฐพ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๐Ÿ“• SALTING & KeyStrtching?

์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์†Œ๊ธˆ์น˜๊ณ  ๋Š˜๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

  • ๋‹จ์ˆœ ํ•ด์‰ฌ๊ฐ’์ด ํ•ดํ‚น์— ์‰ฝ๊ฒŒ ๋…ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— Salting์ด๋ผ๋Š” ์•„์ด๋””์–ด๊ฐ€ ์ƒ๊ฒจ๋‚ฌ๋‹ค.
  • ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ž„์˜๋กœ ์ƒ์„ฑํ•œ ๋ฌธ์ž์—ด(Salt)๋ฅผ ํ•ฉ์ณ ํ•ด์‹ฑํ•ด์„œ ์ด ํ•ด์‹œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ๋ฌผ๋ก  ์ด๋•Œ ๋น„๊ต๋ฅผ ์œ„ํ•ด ํ•ด์‹œ ๊ฐ’๊ณผ ์†Œ๊ธˆ(Salt)๊ฐ’์„ ๊ฐ™์ด ์ €์žฅํ•ด์•ผํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์— ํ•ด์ปค๊ฐ€ ํŒจ์Šค์›Œ๋“œ ๋ฌด์ž‘์œ„ ๋Œ€์ž…์„ ํ†ตํ•ด ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ๋Œ€ํญ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด Salting ๋ฐ ํ•ด์‹ฑ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์›๋ณธ ๊ฐ’์„ ์œ ์ถ”ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด (Key Stretching)ํ‚ค ์ŠคํŠธ๋ ›์นญ์ด๋‹ค.
  • ํšŒ์›๊ฐ€์ž…์„ ์ง„ํ–‰ํ•  ๋•Œ ์†”ํŠธ๊ฐ’์„ ๋ถ™์—ฌ์„œ ์ง„ํ–‰ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ์†”ํŒ…์„ ํ•˜๋ฉด ๋‚˜์˜ค๋Š” ๊ฐ’ + ์†”ํŠธ = ์•”ํ˜ธํ™” ๋œ๋‹ค.

๐Ÿ“• bcrypt

๐Ÿ“Œ Salting & Key Stretching ๋Œ€ํ‘œ์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • bcrypt๋Š” ์•ž์„œ ๋งํ•œ ๊ฐœ๋…๋“ค์„ ์‹ค์ œ๋กœ ์ ์šฉํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•˜์—ฌ ์‰ฝ๊ฒŒ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • bcrypt๋Š” hash๊ฒฐ๊ณผ๊ฐ’์— ์†Œ๊ธˆ๊ฐ’๊ณผ ํ•ด์‹œ๊ฐ’ ๋ฐ ๋ฐ˜๋ณตํšŸ์ˆ˜๋ฅผ ๊ฐ™์ด ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์„ ์ ์šฉํ•˜๋Š”๋ฐ ์žˆ์–ด DB์„ค๊ณ„๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • bcrypt๋ฅผ ํ†ตํ•ด ํ•ด์‹ฑ๋œ ๊ฒฐ๊ณผ ๊ฐ’(Digest)์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ํŒจ์Šค์›Œ๋“œ ๊ฐ’๋งŒ ์ €์žฅํ•˜๋Š” ๊ฒƒ ๋ฟ ์•„๋‹ˆ๋ผ ์†”ํŠธ๊ฐ’๋„ ๊ฐ™์ด ์ €์žฅํ•ด์„œ ๋น„๊ต๋ฅผ ๊ฐ™์ด ํ•œ๋‹ค.

๐Ÿ“• ์ธ๊ฐ€๋Š” ๋ฌด์—‡์ผ๊นŒ?

ํ•ด๋‹น ์œ ์ €๊ฐ€ ์š”์ฒญํ•˜๋Š” ํ•ด๋‹น ๊ถŒํ•œ์ด ์žˆ๋Š” ์ง€ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ์ด๋‹ค.
ex1) ์ฟ ํŒก์ด๋ผ๋Š” ๋ฐฐ์†ก์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ, ์ฃผ๋ฌธํ•˜๊ธฐ๋ฅผ ๋น„๋กœ๊ทธ์ธ ์ƒํƒœ์—์„œ ํ•˜๋ฉด, ๋กœ๊ทธ์ธ ํ•˜๋ผ๊ณ  ์•Œ๋ฆผ์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ -> ๊ถŒํ•œ์— ๋Œ€ํ•œ ํ—ˆ๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
ex2) ๊ฒŒ์‹œ๊ธ€์— ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅด๋ฉด -> ๋ˆ„๊ฐ€ ๋ˆŒ๋ €๋Š”์ง€ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒํ•œ ํ—ˆ๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์œ„ ๋‘๊ฐ€์ง€ ๊ณผ์ •์ด ์ธ๊ฐ€๋ผ๊ณ  ์ƒ๊ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โญโญStatelessํ•œ ์„ฑ์งˆโญโญ

๐Ÿ“• ๋ฌด์ƒํƒœ = Stateless
ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ด€๊ณ„์—์„œ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
Stateless ๊ตฌ์กฐ์—์„œ server๋Š” ๋‹จ์ˆœํžˆ ์š”์ฒญ์ด ์˜ค๋ฉด ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ , ์„ธ์…˜๊ด€๋ฆฌ๋Š” client์—๊ฒŒ ์ฑ…์ž„์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ stateless๊ตฌ์กฐ๋Š” client์™€์˜ ์„ธ์…˜ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ํ•„์š”์— ๋”ฐ๋ผ์„œ ์™ธ๋ถ€ DB์— ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์›น์„œ๋ฒ„ ํ†ต์‹  (http)ํŠน์„ฑ์ƒ ์‚ฌ์šฉ์ž(๋ธŒ๋ผ์šฐ์ €)์˜ ์ด์ „์ƒํƒœ client(์ฟ ํ‚ค) or Server(์„ธ์…˜) ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๋Š” ์ ‘์†์ด๋ž€ ์˜๋ฏธ์ด๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ๋งˆ๋‹ค ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ”๋กœ ๋Š์–ด๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์žฅ์  : ์„œ๋ฒ„์˜ ํ™•์žฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒ ํ•ด๋„ ๋Œ€์ฒ˜๋ฅผ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์  : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์ƒ๋Œ€์ ์œผ๋กœ Stateful๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค.(๋งค๋ฒˆ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ž์‹ ์˜ ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—)
  • ๋Œ€ํ‘œ์ ์ธ Stateless ํ”„๋กœํ† ์ฝœ์€ UDP์™€ HTTP๊ฐ€ ์žˆ๋‹ค.

๐Ÿ“• Stateless ํ†ต์‹ ์˜ ์˜ˆ์‹œ

  • ํ…€๋ธ”๋Ÿฌ์„ ํŒ๋งคํ•˜๋Š” ์„œ๋ฒ„ A

  • ๋Œ€์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•œ ์„œ๋ฒ„ B, C
  • ํ…€๋ธ”๋Ÿฌ๋ฅผ ์‚ฌ๋ ค๋Š” client D

๐Ÿ‘ตD : ํ…€๋ธ”๋Ÿฌ๋ฅผ ๊ตฌ๋งคํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
*๐Ÿ‘ฉโ€A *: ํ…€๋ธ”๋Ÿฌ ์ปค์Šคํ…€์„ ๊ณจ๋ผ์ฃผ์„ธ์š”.(server๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ธฐ์–ตํ•˜์ง€ ์•Š๋Š”๋‹ค.)

๐Ÿ‘ตD *: *ํ…€๋ธ”๋Ÿฌ๋ฅผ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋šœ๊ป‘์€ ํ•˜์–€์ƒ‰, ๋ฐ”๋””๋Š” ๋ณด๋ผ์ƒ‰, ์†์žก์ด๋Š” ๋ถ„ํ™์ƒ‰์ธ ๊ฒƒ์œผ๋กœ ์ฃผ์„ธ์š”.
*๐Ÿง‘โ€B *: ๋ฐฐ์†ก์€ ์–ด๋””๋กœ ํ•ด๋“œ๋ฆด๊นŒ์š”?(์„œ๋ฒ„๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ธฐ์–ตํ•˜์ง€ ์•Š๋Š”๋‹ค.)

๐Ÿ‘ตD: ํ…€๋ธ”๋Ÿฌ๋ฅผ ์‚ฌ๋ คํ•ฉ๋‹ˆ๋‹ค. ๋šœ๊ป‘์€ ํ•˜์–€์ƒ‰, ๋ฐ”๋””๋Š” ๋ณด๋ผ์ƒ‰, ์†์žก์ด๋Š” ๋ถ„ํ™์ƒ‰์ธ ๊ฒƒ์œผ๋กœ ์ฃผ์„ธ์š”. ๋ฐฐ์†ก์€ ํšŒ์‚ฌ๋กœ ํ•ด์ฃผ์„ธ์š”.
๐Ÿ‘ดC: ๊ฒฐ์ œ๋Š” ๋ฌด์—‡์œผ๋กœ ๋„์™€๋“œ๋ฆด๊นŒ์š”? (์„œ๋ฒ„๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ธฐ์–ตํ•˜์ง€ ์•Š๋Š”๋‹ค.)

๐Ÿ‘ตD: ํ…€๋ธ”๋Ÿฌ๋ฅผ ์‚ฌ๋ คํ•ฉ๋‹ˆ๋‹ค. ๋šœ๊ป‘์€ ํ•˜์–€์ƒ‰, ๋ฐ”๋””๋Š” ๋ณด๋ผ์ƒ‰, ์†์žก์ด๋Š” ๋ถ„ํ™์ƒ‰์ธ ๊ฒƒ์œผ๋กœ ์ฃผ์„ธ์š”. ๋ฐฐ์†ก์€ ํšŒ์‚ฌ๋กœ ํ•ด์ฃผ์„ธ์š”.๊ฒฐ์ œ๋Š” ํ˜„๊ธˆ์œผ๋กœํ• ๊นจ์š”.
๐Ÿ‘ดC: ๊ฒฐ์ œ ์™„๋ฃŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.(์„œ๋ฒ„๋Š” ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.)

์—ฌ๊ธฐ์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(์ƒํƒœ)์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ์„œ๋ฒ„๋ผ๋Š” ์ ์ด ํ•ต์‹ฌ์ด๋ผ๊ณ  ํ•  ์ˆ˜์žˆ๋‹ค. ๋ฌด์ƒํƒœ๋Š” ๊ธฐ์กด์˜ ์„œ๋ฒ„๊ฐ€ ํ˜ผ์žกํ•ด์ ธ์„œ ์ƒˆ๋กœ์šด ์„œ๋ฒ„๋ฅผ ๊ฐ€์ ธ๋‹ค ๋†“์•„๋„ ๊ธฐ์กด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์ด๋‹ค๋ฉด, ์ด์ „์˜ ์‚ฌ์šฉ์ž ์š”์ฒญ์ด ์–ด๋–ค์ง€์— ๊ด€๊ณ„์—†์ด ๊ณ„์†์ผ์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•˜๊ณ ์žํ•˜๋Š” ์ตœ์ข… ๋ชฉ์ ์„ ์œ„ํ•ด ์ง€๋‚˜๊ฐ€๋Š” ๊ณผ์ •๋งˆ๋‹ค ์ ์  ์ „๋‹ฌํ•ด์•ผํ•˜๋Š” ๋‚ด์šฉ์ด ๋งŽ์•„์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. HTTP๋Š” ์ด ๋ฌด์ƒํƒœ๋ฅผ ํŠน์ง•์œผ๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
ํŠน๋ณ„ํ•œ ์ผ์ด ์—†๋‹ค๋ฉด ๋ฌด์ƒํƒœ๋ฅผ ์ง€ํ–ฅํ•ด์•ผํ•˜๋ฉฐ ์ •๋งํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค.

๐Ÿ“• ์ธ๊ฐ€๋Š” ๋ฌด์—‡์ผ๊นŒ?

์ธ๊ฐ€ Authorization

  • ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ํ–ˆ์„ ๊ฒฝ์šฐ, ๋กœ๊ทธ์ธ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ๊นŒ?
    : ๋ฐ”๋กœ header์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์„œ ํ™•์ธํ•œ๋‹ค.

  • ์ด ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๋ฐ”๋กœ JSON Web Token ์ผ๋ช… 'JWT'๋ผ๊ณ  ํ•œ๋‹ค.

    ** ๐Ÿ‘ฉโ€๐Ÿซ HTTP ํŠน์ •์˜ˆ์‹œ**

    • ์š”์ฒญ1 : zoom ๋กœ๊ทธ์ธ
    • ์‘๋‹ต1 : ๋กœ๊ทธ์ธ 200 OK!
    • ์š”์ฒญ2 : meeting ์ ‘์†
    • ์‘๋‹ต2 : meeting ์ ‘์† OK!

์š”์ฒญ 1์˜ ์‘๋‹ต 1์—์„œ 200 OK์™€ Token ๋ฐœํ–‰ํ•œ๋‹ค.
์š”์ฒญ 2๋Š” ๋ฐœํ–‰ ๋ฐ›์€ Token๊ณผ ํ•จ๊ป˜ ์š”์ฒญ ๋ณด๋‚ธ๋‹ค.

์ด ๋ฌด๊ฑฐ์šด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฆฌํ€˜์ŠคํŠธ ํ—ค๋”๋ผ๋Š” ๊ณณ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ค€๋‹ค.

ex) ์ฟ ํŒก ๋กœ๊ทธ์ธ -> ํšŒ์›๊ฐ€์ž…์€ ์ด๋ฏธ ๋˜์–ด์žˆ์Œ -> ๋‚ด ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋กœ ๋“ค์–ด์˜ด -> ์ด์ „์— ๋ฆฌํ€˜์ŠคํŠธ์— ๋Œ€ํ•œ ๊ธฐ์–ต์ด ์ „ํ˜€์—†์Œ -> ๋กœ๊ทธ์ธ์„ ํ•ด๋„ ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ณ„์† ๋กœ๊ทธ์ธ์„ ํ•ด์•ผํ•˜๋Š” ๊ณผ์ •์„ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ฐฉ๋ฒ•: ํ† ๊ทผ์„ ๋ฐœํ–‰ํ•ด ์ฃผ๋Š” ๊ฒƒ์ž„ -> ์œ ์ €์ž…๋ ฅ์ •๋ณด๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐฑ์—”๋“œ๋กœ ๋ฐ›์Œ -> ๋กœ๊ทธ์ธ ์„ฑ๊ณต -> ์ œ์ด์Šจ ์›นํ† ํฐ์„ ๋ฐ›์Œ -> ์ด ํ† ํฐ์„ ๋Œ๋ ค๋ฐ›์•„์„œ ๋‹ค์Œ ๋ฆฌํ€˜์ŠคํŠธ์˜ ํ—ค๋”์Šค์— ๋„ฃ์–ด์คŒ -> ์ด๋ ‡๊ฒŒ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฐฑ์—”๋“œ์—์„œ ๋‹ค์‹œ ๋ฐ›์•„์„œ ์žฌ ๋กœ๊ทธ์ธ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•„๊นŒ ๋กœ๊ทธ์ธ ์„ฑ๊ณตํ–ˆ๋˜ ํ† ํฐ์„ ๋ฐ›์•„์„œ ์„œ๋ฒ„์— ์ „๋‹ฌ์„ ํ•ด์คŒ (๋กœ๊ทธ์ธ ํ–ˆ๋˜ ์‚ฌ๋žŒ์ธ์ง€ ์•„๋‹Œ์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ)

So, โญ ์ œ์ด์Šจ ์›นํ† ํฐ์ด ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค!!!!

๐Ÿ“• JOSON Web Token

  • ์œ„์˜ ๊ทธ๋ฆผ์€ JWT ๊ตฌ์กฐ์ด๋‹ค.

๐Ÿ“š ํ—ค๋”์—๋Š” ์–ด๋–ค ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”๊ฐ€? **
1.ํ† ํฐ์˜ ํƒ€์ž…๊ณผ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
2.ํ•ด๋”์˜ ๋‚ด์˜์€ BASE64 ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•ด์„œ JWT ๊ฐ€์žฅ ์ฒซ ๋ถ€๋ถ„์— ๊ธฐ๋ก๋œ๋‹ค.
3. ํ•ด๋”๋ฅผ ๋จผ์ € ๋ณด๋ฉด **"์—ฌ๊ธฐ์˜ ํ† ํฐ์ด ์ œ์ด์Šจ ์›นํ† ํฐ์ด๋‹ค."
๋ผ๋Š” ๊ฒƒ์„ ๋„ฃ์–ด์ฃผ๊ณ  ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•ด์‰ฌํ•  ๊ฒƒ์ธ์ง€ ํ—ค๋”์— ์ •๋ณด๋ฅผ ๋‹ด์•„ ์ค€๋‹ค.
์˜ˆ์‹œ - {"alg":"HS256","typ":"JWT"}

๐Ÿ“š ๋‚ด์šฉ(payload)์—๋Š” ์–ด๋–ค ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐˆ๊นŒ?

  1. ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” exp์™€ ๊ฐ™์ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ง‘ํ•ฉ์ธ Registered Claim
  2. ๊ณต๊ฐœ์šฉ ์ •๋ณด ์ „๋‹ฌ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” Public Claim
  3. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„ ํ˜‘์˜ํ•˜์— ์‚ฌ์šฉํ•˜๋Š” Private Claim
  4. ์œ„์˜ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ์กฐํ•ฉํ•ด์—ฌ ์ž‘์„ฑํ•œ๋’ค BASE64 ์ธ์ฝ”๋”ฉ์„ ํ•˜์—ฌ, ๋‘๋ฒˆ์งธ ์š”์†Œ๋ฅด ์œ„์น˜ํ•œ๋‹ค.
    ์˜ˆ์‹œ - {"user-id": 1,"exp":"1539517391"}

๐Ÿ“š ์„œ๋ช…(signature)์—๋Š” ์–ด๋–ค ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐˆ๊นŒ?

  1. JWT๊ฐ€ ์›๋ณธ ๊ทธ๋Œ€๋กœ๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.
  2. ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” BASE64URL ์ธ์ฝ”๋“œ๋œ header์™€ payload ๊ทธ๋ฆฌ๊ณ  JWT secret(๋ณ„๋„ ์ƒ์„ฑ)์„ ํ—ค๋”์— ์ง€์ •๋œ ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ „์†กํ•œ๋‹ค.(๋ณตํ˜ธํ™” ๊ฐ€๋Šฅ)
  3. ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ JWT ๋ฐฑ์—”๋“œ API ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋ฉด ์„œ๋ฒ„์—์„œ๋Š” ์ „์†ก๋ฐ›์€ JWT์˜ ์„œ๋ช…๋ถ€๋ถ„์„ ๋ณตํ˜ธํ™” ํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•œ JWT๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  4. ๋งˆ์น˜ ๊ณ„์•ฝ์„œ์˜ ์œ„๋ณ€์กฐ๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด ์„œ๋กœ ์‚ฌ์ธํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด๋œ๋‹ค.
  5. ์ฃผ์˜ํ•  ์ ์€ header์™€ payload๋Š” BASE64 ์ธ์ฝ”๋”ฉํ•œ ๊ฒƒ์ด๋ฏ€๋กœ (์•”ํ˜ธํ™”ํ•˜๋‹˜) ๋ˆ„๊ตฌ๋‚˜ ์›๋ณธ์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ๋Š” ์•ˆ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ์˜ ์•”ํ˜ธํ™”๋Š” ๋ณตํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์•„์ด๋””๊ฐ€ ์ค‘๋ณต์ด ๋˜๋“ ๋ง๋“  ์„œ๋ฒ„๊ฐ€ ์—ด์‡ ๋กœ ์—ด์–ด๋ณธ๋‹ค. ์ด ์—ด์‡ ๋กœ ์ž ๊ฐ”์œผ๋‹ˆ๊นŒ ์ด ์—ด์‡ ๋กœ ์—ด์–ด์„œ ๋ณด์•˜์„ ๋•Œ ์—ด๋ฆฌ๋ฉด ์šฐ๋ฆฌ์„œ๋ฒ„์— ๋ฐœ๊ธ‰ํ•œ ํ† ํฐ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

So, ๋‹น๊ทผ์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ํ† ํฐ์ด ์ฟ ํŒก์—์„œ ์‚ฌ์šฉ๋˜๋ฉด x, ์‹œํฌ๋ฆฟ ํ‚ค ๋งŒ์ด ๊ทธ๊ฒƒ์„ ์—ด์–ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค


** ์ƒ์„ฑ๋œ JWT์˜ ์˜ˆ์‹œ**

728x90
๋ฐ˜์‘ํ˜•