[Spring] OAuth 2.0 ๋™์ž‘ ๊ณผ์ •

OAuth 2.0 ๋™์ž‘ ๊ณผ์ •

OAuth์˜ ํ•„์š”์„ฑ

ํ•œ ๋ช…์˜ ํšŒ์›์ด N ๊ฐœ์˜ ์‚ฌ์ดํŠธ์— ํšŒ์› ๊ฐ€์ž…์„ ํ•œ๋‹ค๋ฉด, ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์ž์˜ N ๋ฐฐ์ˆ˜๋งŒํผ์˜ ์•„์ด๋””๊ฐ€ ์ƒ๊ธด๋‹ค.
์ด๋Š” ๊ทธ๋งŒํผ ๊ฐœ์ธ ์ •๋ณด๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , ์ €์žฅ ๊ณต๊ฐ„์˜ ์ˆ˜์š”์™€ ๊ฐœ์ธ ์ •๋ณด์— ๋Œ€ํ•œ ๋ณด์•ˆ ์š”์†Œ๊ฐ€ ๋” ๋งŽ์•„์ง„๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
์ด๋•Œ OAuth๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ด๋ฒ„์™€ ์นด์นด์˜ค ๊ฐ™์€ ์‚ฌ์ดํŠธ๋กœ ๋กœ๊ทธ์ธ์„ ๋งก๊ธฐ๋ฉด ๋งก๊ธด ํ™ˆํŽ˜์ด์ง€๋Š” ์ธ์ฆ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ˆ˜๊ณ (ํšŒ์›๊ฐ€์ž…, ํšŒ์› ํƒˆํ‡ด, ๊ธฐ๊ฐ„์— ๋”ฐ๋ฅธ ๊ด€๋ฆฌ ๋“ฑ๋“ฑ)์„ ๋œ ์ˆ˜ ์žˆ๋‹ค.

OAuth์˜ ๋‘ ๋‹จ๊ณ„

OAuth๋Š” ํฌ๊ฒŒ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค.

  • ์ฝœ๋ฐฑ์œผ๋กœ ์ฝ”๋“œ๊ฐ’์„ ๋ฐ›๋Š” ๊ณผ์ •
  • Access Token์œผ๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญ์˜ ๊ถŒํ•œ์„ ๋ฐ›๋Š” ๊ณผ์ •

์ฒซ ๋ฒˆ์งธ ๊ณผ์ •์€ User๊ฐ€ OAuth๋กœ ์ธ์ฆํ•ด ์ฃผ๋Š” ๊ธฐ๊ด€(๋„ค์ด๋ฒ„, ์นด์นด์˜ค ๋“ฑ)์— ์ธ์ฆ์„ ๋ฐ›์•„์„œ ๊ทธ ์ธ์ฆ์„ ๋‚ด ํ™ˆํŽ˜์ด์ง€๋กœ ์ฝœ๋ฐฑ ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
๋‘ ๋ฒˆ์งธ ๊ณผ์ •์€ ๊ทธ ์ฝœ๋ฐฑ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ User์˜ ์ •๋ณด๋ฅผ ๋‚ด ํ™ˆํŽ˜์ด์ง€๊ฐ€ ์š”์ฒญํ•˜์—ฌ User ์ •๋ณด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

๊ธฐ์กด์˜ ๋กœ๊ทธ์ธ ๊ณผ์ •

User๊ฐ€ ๋‚ด๊ฐ€ ๋งŒ๋“  ํ™ˆํŽ˜์ด์ง€์— ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ž.
๊ทธ๋ ‡๋‹ค๋ฉด User๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋˜๊ณ  ๋‚ด๊ฐ€ ๋งŒ๋“  ํ™ˆํŽ˜์ด์ง€๊ฐ€ ์„œ๋ฒ„๊ฐ€ ๋œ๋‹ค.
ํด๋ผ์ด์–ธํŠธ์ธ User๊ฐ€ ๋กœ๊ทธ์ธ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํ•ด์ฃผ๋ฉด ์„œ๋ฒ„์ธ ํ™ˆํŽ˜์ด์ง€๊ฐ€ ๋กœ๊ทธ์ธ ์‘๋‹ต์„ ํ•ด์ฃผ๋Š” ๊ณผ์ •์ด๋‹ค.

OAuth ๋กœ๊ทธ์ธ ๊ณผ์ • - ๊ตฌ์„ฑ

1

OAuth์˜ ๋กœ๊ทธ์ธ์„ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๊ตฌ์„ฑ์„ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค.
๊ธฐ์กด์˜ ๋กœ๊ทธ์ธ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

  • ์œ ์ € -> ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ(๋ฆฌ์†Œ์Šค : ๊ฐœ์ธ ์ •๋ณด)
  • ๋‚ด ํ™ˆํŽ˜์ด์ง€ -> ํด๋ผ์ด์–ธํŠธ(API ์„œ๋ฒ„์˜ ํด๋ผ์ด์–ธํŠธ)
  • ๋„ค์ด๋ฒ„, ์นด์นด์˜ค ๋“ฑ์˜ API ์„œ๋ฒ„(์ธ์ฆ์„ ํ•ด์ฃผ๋Š” ์„œ๋ฒ„)
  • ์ง€์› ์„œ๋ฒ„ -> ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„(๋ฆฌ์†Œ์Šค : ๊ฐœ์ธ ์ •๋ณด)

OAuth ๋กœ๊ทธ์ธ ๊ณผ์ • - 1. ์ฝœ๋ฐฑ ๊ณผ์ •

User๊ฐ€ ๋‹ค์ด๋ ‰ํŠธ๋กœ OAuth๋ฅผ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” API ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
๋กœ๊ทธ์ธ์ด ํ™•์ธ๋˜๊ณ , API ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ •์ƒ์ ์ธ ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด ๋‚ด ํ™ˆํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ(์ฝœ๋ฐฑ) ํ›„ ์ฝ”๋“œ ๊ฐ’์„ ์ „๋‹ฌํ•ด ์ค€๋‹ค.
๋‚ด ํ™ˆํŽ˜์ด์ง€์—์„  ์ฝ”๋“œ๊ฐ’์ด ์ •์ƒ์ ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์ธ์ฆ๋ฐ›์•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋œ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ณผ์ •์ธ ์ธ์ฆ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค.

OAuth ๋กœ๊ทธ์ธ ๊ณผ์ • - 2. Access Token

๋‚ด ํ™ˆํŽ˜์ด์ง€๋Š” ์ฝ”๋“œ ๊ฐ’์„ API์— ๋ณด๋‚ธ ๋’ค ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์š”์ฒญํ•œ๋‹ค.
API ์„œ๋ฒ„๋Š” ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•˜๊ณ  ๊ฐ’์ด ์ •์ƒ์ด๋ผ๋ฉด Access Token์„ ์ „ํ•ด์ค€๋‹ค.
๋‚ด ํ™ˆํŽ˜์ด์ง€๋Š” Access Token์œผ๋กœ ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›์•˜์œผ๋ฏ€๋กœ, User์— ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์–ป๋Š” ๊ฒƒ์ด๋‹ค.

์ด์™€ ๊ฐ™์ด OAuth๋Š” ์นด์นด์˜ค๋‚˜ ๋„ค์ด๋ฒ„ ๊ฐ™์€ ์‚ฌ์ดํŠธ์— ๊ฐœ์ธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์œ ์ €(๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ)๊ฐ€ ๋‚ด ํ™ˆํŽ˜์ด์ง€์—๊ฒŒ ์นด์นด์˜ค๋‚˜ ๋„ค์ด๋ฒ„ ๊ฐ™์€ ์‚ฌ์ดํŠธ์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์œ„์ž„ํ•ด ์ฃผ๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํ”„๋ง ๊ณต์‹ OAuth

์Šคํ”„๋ง ๊ณต์‹ OAuth ์ฃผ์ฒด๋Š” facebook, google์ด๋ฉฐ OAtuh Client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ง€์›ํ•ด ์ฃผ์–ด์„œ ๋” ํŽธํ•˜๊ฒŒ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
์œ„์˜ ๋‹ค๋ฅธ ๊ตญ๋‚ด์™€ ํ•ด์™ธ์˜ ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ๋“ค๋„ ๋”ฐ๋กœ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.