๐Ÿ”‘ ๊ทธ๋ฆผ์œผ๋กœ ์ดํ•ดํ•˜๋Š” OAuth ("An Illustrated Guide to OAuth" ์š”์•ฝ)

okorionยท2025๋…„ 9์›” 23์ผ

๐Ÿ“ Document ์š”์•ฝ ๋ฐ ๋ฒˆ์—ญ

๋ชฉ๋ก ๋ณด๊ธฐ
18/90

๋“ค์–ด๊ฐ€๋ฉฐ

OAuth๋Š” 2007๋…„ Twitter์—์„œ ์ฒ˜์Œ ์ œ์•ˆ๋œ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ๋‹น์‹œ ์š”๊ตฌ์‚ฌํ•ญ์€ โ€œ์ œ3์ž ์•ฑ์ด ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์•Œ์ง€ ์•Š๊ณ , ๋Œ€์‹  ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•ด ํŠธ์œ—์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒโ€์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, YNAB(๊ฐ€๊ณ„๋ถ€ ์•ฑ)์ด Chase ์€ํ–‰ ๊ณ„์ขŒ์™€ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด, YNAB์ด Chase ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด OAuth๊ฐ€ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.


โŒ ๋‚˜์œ ๋ฐฉ์‹: ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ3์ž์—๊ฒŒ ์ œ๊ณต

  • ์‚ฌ์šฉ์ž๊ฐ€ โ€œํŠธ์œ„ํ„ฐ ๋กœ๊ทธ์ธโ€ ์ฐฝ์— ์•„์ด๋””์™€ ๋น„๋ฒˆ์„ ์ž…๋ ฅํ•˜๋ฉด, ์‚ฌ์‹ค์ƒ ๊ทธ ์ •๋ณด๋Š” ์ œ3์ž ์•ฑ์œผ๋กœ ์ „๋‹ฌ๋จ.
  • ์œ„ํ—˜ํ•œ ์ด์œ :
    • ์•ฑ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ฉด ์œ ์ถœ ์œ„ํ—˜.
    • ์‚ฌ์šฉ์ž๋Š” ์–ด๋””๊นŒ์ง€ ๊ถŒํ•œ์ด ์“ฐ์ด๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Œ.

โœ… ์ข‹์€ ๋ฐฉ์‹: OAuth ํ† ํฐ

  • ํ•ต์‹ฌ ๊ฐœ๋…: ์•ก์„ธ์Šค ํ† ํฐ(access token)
  • ์•ก์„ธ์Šค ํ† ํฐ์€ โ€œํŠน์ • ์‚ฌ์šฉ์žโ€๋ฅผ ์œ„ํ•œ ์ผํšŒ์šฉ API ํ‚ค์™€ ๊ฐ™์Œ.
  • ์•ฑ์€ ์ด ํ† ํฐ์„ ๋ฐ›์•„ ํ—ˆ์šฉ๋œ ๋ฒ”์œ„(scope) ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ.

๐ŸŒ€ OAuth ํ๋ฆ„ (์‚ฌ์šฉ์ž ๊ด€์ )

  1. YNAB์—์„œ Chase ์—ฐ๊ฒฐ ๋ฒ„ํŠผ ํด๋ฆญ.
  2. YNAB์€ Chase๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ.
  3. Chase ๋กœ๊ทธ์ธ โ†’ YNAB์ด ์–ด๋–ค ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๋Š”์ง€ ํ™•์ธ (์˜ˆ: ํŠน์ • ๊ณ„์ขŒ read-only).
  4. ๋™์˜ํ•˜๋ฉด ๋‹ค์‹œ YNAB์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ.
  5. YNAB์€ Chase๋กœ๋ถ€ํ„ฐ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๊ณ , ์ดํ›„ Chase ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ.

๐Ÿ” ๋ณด์•ˆ ํฌ์ธํŠธ

  • ์•ก์„ธ์Šค ํ† ํฐ์„ URL์— ์ง์ ‘ ๋‹ด์•„ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜๋Š” ๊ฑด ๊ธˆ์ง€!
    โ†’ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก์ด๋‚˜ ์„œ๋ฒ„ ๋กœ๊ทธ์— ๋‚จ์•„ ์œ ์ถœ๋  ์ˆ˜ ์žˆ์Œ.
  • ๋Œ€์‹  Authorization Code๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ ,
    • ํด๋ผ์ด์–ธํŠธ ์•ฑ์€ ์ด ์ฝ”๋“œ๋ฅผ ๋ฐฑ์—”๋“œ POST ์š”์ฒญ(HTTPS) ์œผ๋กœ ๊ตํ™˜.
    • ์ด๋•Œ Client Secret๋„ ํ•จ๊ป˜ ์ „์†กํ•˜์—ฌ ํ•ฉ๋ฒ•์ ์ธ ์š”์ฒญ์ธ์ง€ ๊ฒ€์ฆ.
  • ์ตœ์ข…์ ์œผ๋กœ ์•ก์„ธ์Šค ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐœ๊ธ‰๋ฐ›์Œ.

๐Ÿงฉ OAuth ์šฉ์–ด ์ •๋ฆฌ

  • Resource Owner โ†’ ์‚ฌ์šฉ์ž
  • Client โ†’ OAuth ์•ฑ (์˜ˆ: YNAB)
  • Authorization Server โ†’ ๋กœ๊ทธ์ธ/๊ถŒํ•œ ๋™์˜ ๋‹ด๋‹น ์„œ๋ฒ„ (์˜ˆ: Chase ์ธ์ฆ ์„œ๋ฒ„)
  • Resource Server โ†’ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„ (์˜ˆ: Chase API ์„œ๋ฒ„)
  • Scope โ†’ ๊ถŒํ•œ์˜ ๋ฒ”์œ„ (์˜ˆ: โ€œchecking ๊ณ„์ขŒ ์กฐํšŒโ€)

โš™๏ธ ์•ฑ ๋“ฑ๋ก ๊ณผ์ •

OAuth๋ฅผ ์“ฐ๋ ค๋ฉด ์•ฑ์„ ์‚ฌ์ „์— ๋“ฑ๋กํ•ด์•ผ ํ•จ.

  • ๋“ฑ๋ก ์‹œ ํ•„์š”ํ•œ ์ •๋ณด:
    • ์•ฑ ์ด๋ฆ„ (์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง)
    • Redirect URI (๊ถŒํ•œ ๋™์˜ ํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ์•„๊ฐˆ ๊ณณ)
  • ๋ฐœ๊ธ‰๋˜๋Š” ๊ฐ’:
    • Client ID: ๊ณต๊ฐœ ์‹๋ณ„์ž
    • Client Secret: ๋น„๋ฐ€ ํ‚ค (๋ฐฑ์—”๋“œ์—์„œ๋งŒ ์‚ฌ์šฉ)

๐Ÿ›ฐ๏ธ Front-channel vs Back-channel

  • Front-channel: URL ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋จ (GET) โ†’ ๋ˆ„๊ตฌ๋‚˜ ๋ณผ ์ˆ˜ ์žˆ์Œ.
  • Back-channel: HTTPS POST ์š”์ฒญ์œผ๋กœ ์ „๋‹ฌ๋จ โ†’ ์•ˆ์ „.
  • ๋”ฐ๋ผ์„œ ์ค‘์š”ํ•œ ๊ตํ™˜(์ฝ”๋“œโ†’ํ† ํฐ)์€ ๋ฐ˜๋“œ์‹œ Back-channel์—์„œ ์ˆ˜ํ–‰.

๐Ÿ”‘ PKCE (Proof Key for Code Exchange)

  • ๋ชจ๋ฐ”์ผ ์•ฑ์ด๋‚˜ ๋ฐฑ์—”๋“œ ์—†๋Š” ์•ฑ์€ Client Secret์„ ์ˆจ๊ธธ ์ˆ˜ ์—†์Œ.
  • ์ด ๊ฒฝ์šฐ PKCE๋ผ๋Š” ์ถ”๊ฐ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ™œ์šฉ โ†’ ๋น„๋ฐ€ ํ‚ค ์—†์ด๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฝ”๋“œ ๊ตํ™˜ ๊ฐ€๋Šฅ.
  • ํ˜„์žฌ๋Š” ํ‘œ์ค€ ํ”Œ๋กœ์šฐ์—์„œ๋„ PKCE ์‚ฌ์šฉ์„ ๊ถŒ์žฅ.

๐Ÿ”„ ํ† ํฐ ๊ฐฑ์‹  & OIDC

  • ํ† ํฐ ๋งŒ๋ฃŒ โ†’ Refresh Token์œผ๋กœ ์ƒˆ ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰.
  • ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ โ†’ OAuth ์œ„์— OpenID Connect (OIDC) ๊ณ„์ธต์„ ์–น์–ด ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ์ œ๊ณต (โ€œ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธโ€ ๊ฐ™์€ ๊ธฐ๋Šฅ).

โœจ ๋งˆ๋ฌด๋ฆฌ

OAuth๋Š” ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ ํ•ต์‹ฌ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค:

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ œ3์ž์—๊ฒŒ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  • ๋Œ€์‹  ์ œ3์ž์—๊ฒŒ๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์–ธ์ œ๋‚˜ ์–ด๋–ค ๊ถŒํ•œ์„ ์ฃผ๋Š”์ง€ ๋™์˜ํ•œ๋‹ค.

๐Ÿ‘‰ ์ด ์„ธ ๊ฐ€์ง€ ์›์น™์„ ๊ธฐ์–ตํ•˜๋ฉด OAuth์˜ ๋‹ค์–‘ํ•œ ํ”Œ๋กœ์šฐ์™€ ์šฉ์–ด๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

์›๋ฌธ - https://www.ducktyped.org/p/an-illustrated-guide-to-oauth

profile
okorion's Tech Study Blog.

0๊ฐœ์˜ ๋Œ“๊ธ€