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

Spring

์ธ์ฆ, ์ธ๊ฐ€, ์ฟ ํ‚ค, ์„ธ์…˜, OAuth2

์ธ์ฆ, ์ธ๊ฐ€, ์ฟ ํ‚ค, ์„ธ์…˜, OAuth2

์ŠคํŒŒ๋ฅดํƒ€ ์ฝ”๋”ฉ ํด๋Ÿฝ์˜ Spring ์‹ฌํ™”๋ฐ˜ 2์ฃผ ์ฐจ ๋‚ด์šฉ์ธ ์ธ์ฆ, ์ธ๊ฐ€, ์ฟ ํ‚ค, ์„ธ์…˜, OAuth2์„ ์ •๋ฆฌํ•œ๋‹ค.

ํ•ต์‹ฌ ๋‚ด์šฉ

  • ์›น์—์„œ์˜ ์ธ์ฆ & ์ธ๊ฐ€, ์ฟ ํ‚ค & ์„ธ์…˜
  • Spring Security๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€
  • OAuth2๋ฅผ ์ด์šฉํ•œ ์†Œ์…œ ๋กœ๊ทธ์ธ

์ธ์ฆ vs ์ธ๊ฐ€

์ธ์ฆ (Authentication)

์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ํ–‰์œ„

๋กœ๊ทธ์ธ์„ ํ†ตํ•ด(์ฃผ๋กœ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋กœ) ๋ณธ์ธ์ž„์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ

์ธ๊ฐ€ (Authorization)

์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” ํ–‰์œ„

์—ญํ• (Admin, User ...)์— ๋”ฐ๋ฅธ ์‚ฌ์šฉ ๊ถŒํ•œ ๊ด€๋ฆฌ

์ฟ ํ‚ค์™€ ์„ธ์…˜

HTTP๋Š” ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ(Stateless)

์ฟ ํ‚ค์™€ ์„ธ์…˜์€ ๋ชจ๋‘ HTTP์— ์ƒํƒœ ์ •๋ณด๋ฅผ ์œ ์ง€(Stateful) ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ.

์ฟ ํ‚ค

  • ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ์ •๋ณด๋ฅผ ๋‹ด์€ ํŒŒ์ผ
  • Application - Storage - Cookies์— ๋„๋ฉ”์ธ ๋ณ„๋กœ ์ €์žฅ๋จ
  • Name(์ด๋ฆ„), Value(๊ฐ’), Domain(์ €์žฅ๋œ ๋„๋ฉ”์ธ), Path(์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ๋กœ), Expire(๋งŒ๋ฃŒ ๊ธฐํ•œ)๋กœ ๊ตฌ์„ฑ

์„ธ์…˜

  • ์„œ๋ฒ„์— ์ €์žฅ๋˜๋ฉฐ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ์„ธ์…˜ ID(์„œ๋ฒ„์—์„œ ์ €์žฅํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋ณ„๋กœ ์œ ์ผ๋ฌด์ด)๋ฅผ ๋ถ€์—ฌํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ ๋ณ„ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ €์žฅ
  • ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•œ '์„ธ์…˜ ID'(์‘๋‹ต ํ—ค๋”๋กœ ์ „๋‹ฌ๋จ)๋Š” ์„ธ์…˜ ์ฟ ํ‚ค(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ €์žฅ)๋กœ ์ €์žฅ๋˜์–ด ํด๋ผ์ด์–ธํŠธ ์‹๋ณ„์— ์‚ฌ์šฉ๋จ

Spring Security๋ฅผ ํ†ตํ•œ ์ธ์ฆ, ์ธ๊ฐ€

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ

ํด๋ผ์ด์–ธํŠธ - ์ปจํŠธ๋กค๋Ÿฌ

๊ธฐ์กด์˜ ํด๋ผ์ด์–ธํŠธ - ์ปจํŠธ๋กค๋Ÿฌ ์‚ฌ์ด์—์„œ request, response๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •์—์„œ ์ธ์ฆ ์ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•  ๋•Œ, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ฅผ ๋‹ด๋‹นํ•ด ์ค€๋‹ค.

ํด๋ผ์ด์–ธํŠธ - ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ - ์ปจํŠธ๋กค๋Ÿฌ

์ธ์ฆ/์ธ๊ฐ€๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ UserDetails ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ด์ฃผ์ง€๋งŒ, ์ธ์ฆ/์ธ๊ฐ€๊ฐ€ ์‹คํŒจํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‹คํŒจ ์ฒ˜๋ฆฌ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ๊ณผ์ •

Authentication Manager (username์œผ๋กœ ๋“ฑ๋ก๋œ ํšŒ์› ID)-> UserDetailsService <-> DB(ํšŒ์› ID๋กœ ํ•ด๋‹น Account๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ)

WebSecurityConfig์— ์„ค์ •ํ•œ ๋กœ๊ทธ์ธ ์ฃผ์†Œ๋กœ Id์™€ Password๋ฅผ post ์š”์ฒญ์œผ๋กœ ๋ณด๋‚ด๋ฉด Authentication Manager๊ฐ€ Id๋ฅผ UserDetailsService๋กœ ๋ณด๋‚ด๊ฒŒ ๋˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด DB์—์„œ ํ•ด๋‹น ํšŒ์›์ •๋ณด๊ฐ€ ์žˆ๋Š”์ง€ ์กฐํšŒํ•œ๋‹ค.

UserDetailsService -> UserDetails -> Authentication Manager

ํšŒ์›์ •๋ณด๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ์กฐํšŒ๋œ Account ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด UserDetailsService์—์„œ UserDetails ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด Authentication Manager์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ Id, Password ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ธ์ฆ์„ ์‹œ๋„ํ•œ๋‹ค.

์ธ์ฆ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ค„์ง„๋‹ค๋ฉด ์š”์ฒญ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ UserDetails๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ธ๊ฐ€๋ฅผ ์‹œ๋„ํ•œ๋‹ค.

OAuth2๋ฅผ ์ด์šฉํ•œ ์†Œ์…œ ๋กœ๊ทธ์ธ

OAuth2 ๋กœ๊ทธ์ธ์˜ ํ๋ฆ„

  • ์ธ์ฆ ์ฝ”๋“œ ์š”์ฒญ <-> ์ธ์ฆ ์ฝ”๋“œ ์ „๋‹ฌ
  • ์ธ์ฆ ์ฝ”๋“œ๋กœ ํ† ํฐ ์š”์ฒญ <-> ํ† ํฐ ์ „๋‹ฌ
  • ํ† ํฐ์œผ๋กœ API ํ˜ธ์ถœ <-> ํ† ํฐ ์œ ํšจ์„ฑ ํ™•์ธ ํ›„ ์‘๋‹ต ์ „๋‹ฌ

OAuth2๋Š” ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

OAuth2 ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ์ˆœ์„œ

  • OAuth2๋ฅผ ์ œ๊ณตํ•ด ์ฃผ๋Š” ํ™ˆํŽ˜์ด์ง€์—์„œ REST API ํ‚ค๋ฅผ ๋ฐ›์€ ๋’ค ํ•ด๋‹น REST API ํ‚ค๋ฅผ ๋„ฃ์–ด ๋กœ๊ทธ์ธ ์š”์ฒญ URI๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ ์š”์ฒญ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค.(ํ”„๋ก ํŠธ๋‹จ์—์„œ)
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ OAuth2 ๋กœ๊ทธ์ธ์— ๋™์˜ํ•˜๋ฉด ๋“ฑ๋กํ•ด๋‘” ์ฝœ๋ฐฑ URI๋กœ ์ธ๊ฐ€ ํ† ํฐ์ด ์ „๋‹ฌ๋œ๋‹ค.
  • ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ•ด๋‹น ํ† ํฐ์„ ๋ฐ›์•„ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.
    1. ์ธ๊ฐ€ ์ฝ”๋“œ๋กœ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐ›๋Š” ์ฒ˜๋ฆฌ
    2. ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ OAuth2 ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ›๋Š” ์ฒ˜๋ฆฌ
  • ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ›์•˜์œผ๋ฉด DB์—์„œ ์กฐํšŒํ•˜์—ฌ ํ•ด๋‹น ๊ณ„์ •์ด ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ(UsernamePasswordAuthenticationToken์„ ์ด์šฉํ•˜์—ฌ), ์—†์œผ๋ฉด DB์— Account๋ฅผ ์ €์žฅ ํ›„ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.