๐Ÿ“‹ ํ…Œ์ŠคํŠธ๋กœ ๋ฐฐ์šฐ๋Š” Spring Auth ๊ฐ•์˜


ํ”ผ๋“œ๋ฐฑ ๊ฐ•์˜

์ธ์ฆ ํ—ค๋”

๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ํ† ํฐ์„ ๋ฐœ๊ธ‰ ๋ฐ›์€ ํ›„ ํ—ค๋”์— Authorization์— ํ† ํฐ์„ ์‹ค์–ด๋ณด๋‚ธ๋‹ค.
์™œ ๊ตณ์ด ์ด ํ—ค๋”์— ํ† ํฐ์„ ๋„ฃ์–ด ๋ณด๋‚ผ๊นŒ?

HTTP ์ธ์ฆ

HTTP ํ”„๋กœํ† ์ฝœ์˜ ์ •์˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ โ€œ/โ€ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์—†์œผ๋ฉด 401์„ ๋ณด๋‚ธ๋‹ค.
  3. ์—ฌ๊ธฐ์„œ๋Š” basic์ด๋ผ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ณ  ์žˆ๋‹ค. ์ž˜๋ชป๋˜์—ˆ์œผ๋‹ˆ ๋‹ค์‹œ ์š”์ฒญํ•ด!

HTTP ์ธ์ฆ ์Šคํ‚ด

Basic

  • base64๋ฅผ ์ด์šฉํ•ด ์ธ์ฝ”๋”ฉ๋œ ์‚ฌ์šฉ์ž์˜ id/pw ์Œ์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ „๋‹ฌ
  • ์•ˆ์ „์„ ์œ„ํ•ด HTTPS(TLS) ์—ฐ๊ฒฐ ์œ„์—์„œ ๋ฐœ์ƒ๋˜์–ด์•ผ ํ•จ

Bearer

  • bearer token์ด๋ผ๋Š” ๋ณด์•ˆ ํ† ํฐ์„ ํ™œ์šฉํ•˜๋Š” ์ธ์ฆ ์Šคํ‚ด
  • Outh2.0์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง

JWT

  • Json Web Token
  • ์›น ํ‘œ์ค€ (RFC 7519)
  • ์ž์ฒด์ ์œผ๋กœ ๊ฒ€์ฆ๋˜์—ˆ์Œ์„ ์ฆ๋ช…ํ•ด์ฃผ๋Š” signature๋ฅผ ํฌํ•จ
  • ์ƒ์„ฑ์‹œ ๊ฒ€์ฆ์ด๋‚˜ ๊ถŒํ•œ ์ธ๊ฐ€ ์‹œ ํ•„์š”ํ•œ ๊ฐ’์„ ๋„ฃ์–ด ์ƒํƒœ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋จ

ํ† ํฐ์˜ ๊ตฌ์„ฑ

1. Header

  • ํ† ํฐ์— ๋Œ€ํ•œ ํ•ด์„ ๋ฐฉ๋ฒ•
  • alg : ์‹œ๊ทธ๋‹ˆ์ฒ˜์—์„œ ์‚ฌ์šฉํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐฉ๋ฒ•
  • typ : ํ† ํฐ์˜ ํƒ€์ž…

2. Payload

  • ํ† ํฐ์˜ ๋‚ด์šฉ, ์ „๋‹ฌํ•  ๋‚ด์šฉ
  • payload์˜ ๊ฐ๊ฐ์˜ ๊ฐ’์„ ํด๋ ˆ์ž„์ด๋ผ๊ณ  ํ•จ
  • sub : ํด๋ ˆ์ž„์˜ ์ œ๋ชฉ
  • name :
  • iat : ์ƒ์„ฑ ์‹œ๊ฐ„
  • ์ด ์—ญ์‹œ๋„ base64๋กœ ์ธ์ฝ”๋”ฉ

3. Signature

  • ํ—ค๋”์™€ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ๋ณ€์กฐ๋˜์ง€ ์•Š์•˜์Œ์„ ๊ฒ€์ฆŒ
  • base64๋กœ ์ธ์ฝ”๋”ฉ์„ ํ•˜๊ณ , ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ‚ค๊ฐ’์œผ๋กœ ํ•ด๋…

basic๊ณผ bearer ๋‘˜ ๋‹ค base64๋กœ ์ธ์ฝ”๋”ฉ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋‚˜์š”?

์ด๋Š” ์„œ๋ฒ„์—์„œ ํŽ˜์ดํฌ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ์ง€!

payload๊ฐ€ ๊ฐ™์œผ๋ฉด ํ† ํฐ ๊ฐ’๋„ ๊ฐ™์•„์ง€๋‚˜์š”?

๊ทผ๋ฐ ์•„๋งˆ iat๊ฐ€ ๋‹ฌ๋ผ์„œ ๋‹ค๋ฅผ ์ˆ˜ ๋ฐ–์— ์—†์„ ๋“ฏ


Dispatcher Servlet

์š”์ฒญ์— ๋”ฐ๋ผ ์ˆ˜ํ–‰ํ•  ๋กœ์ง ๋ถ„๊ธฐ

DispatcherServlet ์œ„์น˜

  • Handler ์•ž์— Interceptor๊ฐ€ ์žˆ์Œ

MVC Config ๊ฐ์ฒด๋„ ๋ชจ๋‘ ๋นˆ์ด์—ˆ๋‹ค.