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

Today I Learned

Spring Security? OAuth2 ?

 

Today I Learn โœ๐Ÿผ 

 

  • ์˜ค๋Š˜ ํ•˜๋ฃจ ๊ฐ€์žฅ ์ธ์ƒ ๊นŠ์—ˆ๋˜ ๋ฐฐ์›€์—๋Š” ๋ญ๊ฐ€ ์žˆ์—ˆ์ง€?

 

  • ๊ทธ ๋ฐฐ์›€๊นŒ์ง€ ๋‹ค๊ฐ€๊ฐ€๋Š”๋ฐ ์–ด๋–ค ์–ด๋ ค์›€์ด ์žˆ์—ˆ์ง€?

 

  • ๊ทธ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‚˜์˜ ์‹œ๋„๋“ค์€ ๋ฌด์—‡์ด ์žˆ์—ˆ์ง€?

 

  • ๊ทธ ๊ณผ์ •์—์„œ ๋‚˜๋Š” ๋ฌด์—‡์„ ๊นจ๋‹ฌ์•˜๊ณ , ์–ด๋–ค ๊ฐ์ •/์ƒ๊ฐ์ด ๋“ค์—ˆ์—ˆ์ง€?

 

  • ์ด ์ƒํƒœ์—์„œ ์ดํ›„ ๋” ๋‚˜์€ ๋‚ด๊ฐ€ ๋˜๋ ค๋ฉด ๋ฌด์—‡์„ ๋ณด์™„ํ•˜์ง€?

 


 

Spring Security? OAuth2 ?

 

Spring Security

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ ์ „๋ฐ˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ
  • OAuth2๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ๋ฒ•์„ ์ง€์›

OAuth2

  • ํŠน์ •ํ•œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ

 

 


 

Spring Security

  • ๋ชฉ์ : Spring Security๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์นœ ๋ณด์•ˆ ์„ค์ •์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ(authentication)๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ(authorization) ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ:
    • ์ธ์ฆ(Authentication): ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ์ž ์ •๋ณด(ID์™€ ํŒจ์Šค์›Œ๋“œ ๋“ฑ)๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
    • ๊ถŒํ•œ ๋ถ€์—ฌ(Authorization): ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๋ฆฌ์†Œ์Šค๋‚˜ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณด์•ˆ ํ•„ํ„ฐ: ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ํ•„ํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์š”์ฒญ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ๋ณด์•ˆ ๊ฒ€์‚ฌ ๋ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์„ธ์…˜ ๊ด€๋ฆฌ: ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐํƒ€ ๋ณด์•ˆ ๊ธฐ๋Šฅ: CSRF ๋ณดํ˜ธ, URL ์ ‘๊ทผ ์ œ์–ด, ๋ฉ”์„œ๋“œ ๋ณด์•ˆ, ์•”ํ˜ธํ™”, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ ๋“ฑ.

 


OAuth2

  • ๋ชฉ์ : OAuth2๋Š” ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ์˜ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ๋กœ, ํŠนํžˆ API์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ œ3์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ:
    • ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ: OAuth2๋Š” ์•ก์„ธ์Šค ํ† ํฐ(access token)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์—ญํ• :
      • Resource Owner (์ž์› ์†Œ์œ ์ž): ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์‚ฌ์šฉ์ž.
      • Client (ํด๋ผ์ด์–ธํŠธ): ์ž์› ์†Œ์œ ์ž๋กœ๋ถ€ํ„ฐ ๊ถŒํ•œ์„ ์–ป์–ด ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์ ‘๊ทผํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜.
      • Authorization Server (์ธ์ฆ ์„œ๋ฒ„): ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
      • Resource Server (๋ฆฌ์†Œ์Šค ์„œ๋ฒ„): ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ํ†ตํ•ด ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
    • ๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•:
      • Authorization Code Grant: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹.
      • Implicit Grant: ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ํ† ํฐ์„ ์ง์ ‘ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ฃผ๋กœ SPA์—์„œ ์‚ฌ์šฉ.
      • Resource Owner Password Credentials Grant: ์‚ฌ์šฉ์ž์˜ ID์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜์—ฌ ํ† ํฐ์„ ๋ฐ›๋Š” ๋ฐฉ์‹.
      • Client Credentials Grant: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์ฒด ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹

 


์ฐจ์ด์  ์š”์•ฝ

  • ์Šค์ฝ”ํ”„:
    • Spring Security๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „๋ฐ˜์ ์ธ ๋ณด์•ˆ์„ ๋‹ค๋ฃจ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
    • OAuth2๋Š” ํŠน์ • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ์‚ฌ๋ก€:
    • Spring Security๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์˜ ๋ณด์•ˆ์„ ์„ค์ •ํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • OAuth2๋Š” ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํ†ตํ•ฉ:
    • Spring Security๋Š” OAuth2๋ฅผ ์ง€์›ํ•˜๋ฉฐ, Spring Security OAuth2 ๋ชจ๋“ˆ์„ ํ†ตํ•ด OAuth2 ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

'Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”„๋กœ์ ํŠธ ์‹œ์ž‘  (0) 2024.08.23
API ์„ค๊ณ„ ์›์น™  (0) 2024.08.20
Redis, Spring  (0) 2024.08.07
MSA, Spring Cloud  (0) 2024.08.06
DI, IoC  (0) 2024.07.30