Web programming

OAuth 2.0 ์ดํ•ด์™€ TikTok Shop API ์—ฐ๋™ํ•˜๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2025. 9. 7.

์‚ฌ๋‚ด์—์„œ ํ†ตํ•ฉ ์‡ผํ•‘๋ชฐ ์—ฐ๋™์„œ๋น„์Šค์— ์ƒˆ๋กญ๊ฒŒ ๋™๋‚จ์•„ ์‹œ์žฅ์„ ๊ฒจ๋ƒฅํ•˜์—ฌ, TikTok Shop ์˜คํ”ˆ๋งˆ์ผ“ ์—ฐ๋™์„ ๋‹ด๋‹นํ•˜๊ฒŒ ๋์Šต๋‹ˆ๋‹ค. TikTok Shop  API ๋ฅผ ์—ฐ๋™ํ•˜๋ฉด์„œ TikTok Shop ์—์„  ์ธ์ฆ์ธ๊ฐ€๋ฅผ OAuth 2.0 ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธธ๋ž˜, ๊ณต๋ถ€๋„ํ•  ๊ฒธ ๊ธ€๋กœ ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

ํ˜„๋Œ€ ์›น ์„œ๋น„์Šค์—์„œ OAuth 2.0 ๊ฐ€ ๋งค์šฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋‹จ์ˆœํžˆ '์†Œ์…œ ๋กœ๊ทธ์ธ' ๊ธฐ์ˆ ๋กœ๋งŒ ์•Œ๊ณ  ์žˆ๋Š” OAuth 2.0์˜ ๋ณธ์งˆ์ ์ธ ๋ชฉ์ ๊ณผ, ํ˜„์—…์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Authorization Code Flow์˜ ๋™์ž‘ ์›๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  OpenID Connect(OIDC)๋ฅผ ํ†ตํ•œ ์ธ์ฆ(Authentication) ํ™•์žฅ๊นŒ์ง€ ๋ช…ํ™•ํžˆ ์ •๋ฆฌํ•ด ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ”OAuth 2.0 — ์ธ๊ฐ€(Authorization)๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ

 

๋Œ€๋ถ€๋ถ„์˜ ํŒ€์ด ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ, ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”๋‚˜ ํŠธ์œ„ํ„ฐ API์™€ ๊ฐ™์€ ํƒ€์‚ฌ ์„œ๋น„์Šค์˜ API๋ฅผ ์ด์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ํƒ€์‚ฌ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๊ณผ๊ฑฐ์—๋Š” ์–ด๋–ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์„๊นŒ์š”?

 

OAuth๊ฐ€ ์—†๋˜ ์‹œ์ ˆ์—๋Š”, ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž(Resource Owner)์˜ ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๊ตฌ๊ธ€ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ง์ ‘ ์ „๋‹ฌ๋ฐ›์•„ ๋กœ๊ทธ์ธ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด ๋ฐฉ์‹์€ ์น˜๋ช…์ ์ธ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ์‹ ๋ขฐ ๋ฌธ์ œ
    ์‚ฌ์šฉ์ž๋Š” ID์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ, ์บ˜๋ฆฐ๋” ์ •๋ณด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ตฌ๊ธ€ ํฌํ† , ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๋“ฑ ์›ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์„ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ๊ด€๋ฆฌ ๋ถ€๋‹ด
    ๊ฐœ๋ฐœํ•œ ์„œ๋น„์Šค(ํด๋ผ์ด์–ธํŠธ)๋Š” ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž์˜ ๋ฏผ๊ฐํ•œ ๊ตฌ๊ธ€ ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ณด์•ˆ์  ๋ถ€๋‹ด์„ ์•ˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋œ๋‹ค๋ฉด ์„œ๋น„์Šค๋Š” ์‹ฌ๊ฐํ•œ ๋ฒ•์  ๋ฌธ์ œ๋ฅผ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋ฆฌ์†Œ์Šค ์ œ๊ณต์ž ๋ณด์•ˆ ๋ฌด๋ ฅํ™”
    ๊ตฌ๊ธ€์ด ์•„๋ฌด๋ฆฌ ๋ณด์•ˆ ์ˆ˜์ค€์„ ๋†’์—ฌ๋„, ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ์ž ID/PW๊ฐ€ ๋…ธ์ถœ๋œ๋‹ค๋ฉด ๋ชจ๋“  ๋ณด์•ˆ ์กฐ์น˜๊ฐ€ ๋ฌด์šฉ์ง€๋ฌผ์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ, ์ด ๋ชจ๋“  ๋ฌธ์ œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ID์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค

 

 

 

 

๐Ÿ”ฐOAuth์˜ ํ•ต์‹ฌ ์›์น™: "์ธ์ฆ"๊ณผ "์ธ๊ฐ€"์˜ ๋ถ„๋ฆฌ

 

ํด๋ผ์ด์–ธํŠธ(๊ฐœ๋ฐœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ๋ฆฌ์†Œ์Šค(ํƒ€์‚ฌ ์„œ๋น„์Šค์˜ ๋ฆฌ์†Œ์Šค: ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ(Authorization), ์ฆ‰ ์ธ๊ฐ€์ž…๋‹ˆ๋‹ค.

์ด ์ธ๊ฐ€๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ธ์ฆ(Authentication)์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

OAuth๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ๊ณผ ์ธ๊ฐ€์˜ ๋Œ€์ƒ์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ (Authentication): ์‚ฌ์šฉ์ž๊ฐ€ ๋ฆฌ์†Œ์Šค ์ œ๊ณต์ž์—๊ฒŒ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ธ๊ฐ€ (Authorization): ์ธ์ฆ ํ›„, ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ ๊ถŒํ•œ์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์œ„์ž„๋ฐ›์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๋Š” ํƒ€์‚ฌ ์„œ๋น„์Šค์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ฃผ์ง€ ์•Š๊ณ (์ธ์ฆ์€ ์œ ์ €๊ฐ€ ์ง์ ‘), ์„œ๋น„์Šค ์ œ๊ณต์ž๊ฐ€ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” "ํ† ํฐ"(๊ถŒํ•œ์€ ์„œ๋น„์Šค์—๊ฒŒ ์œ„์ž„)๋งŒ ๋งก๊น๋‹ˆ๋‹ค.

 

 

๐Ÿ’ OAuth 2.0์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฃผ์ฒด (Role) ์˜ˆ์‹œ ์—ญํ• 
Resource Owner (๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ) ์‚ฌ์šฉ์ž (User) ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด.
Client (ํด๋ผ์ด์–ธํŠธ) ์‚ฌ๋‚ด์—์„œ ๊ฐœ๋ฐœํ•œ ์„œ๋น„์Šค ๊ถŒํ•œ์„ ์œ„์ž„๋ฐ›๋Š” ์ฃผ์ฒด.
Authorization Server (์ธ๊ฐ€ ์„œ๋ฒ„) ๊ตฌ๊ธ€์˜ ์ธ์ฆ ์„œ๋ฒ„ ์ธ์ฆ ๊ฒ€์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๋‹ด๋‹น.
Resource Server (๋ฆฌ์†Œ์Šค ์„œ๋ฒ„) ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋” API ์ธ๊ฐ€๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณต.

 

 

1. Resource Owner (๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ)

๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ๋Š” ์ž์‹ ์ด ์†Œ์œ ํ•œ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค(Protected Resource)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ์—ญํ• : ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž(End-User)์ž…๋‹ˆ๋‹ค. (์˜ˆ: ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋” ์ผ์ •์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž, ํ‹ฑํ†ก ์ƒต์˜ ํŒ๋งค์ž ๊ณ„์ • ์ฃผ์ธ)
  • ๊ถŒํ•œ ๋ถ€์—ฌ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ํ—ˆ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ, ์ธ๊ฐ€ ์„œ๋ฒ„์— ์ง์ ‘ ์ธ์ฆ(Authentication)์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ด๋ฅผ ์ž…์ฆํ•ฉ๋‹ˆ๋‹ค.

2. Client (ํด๋ผ์ด์–ธํŠธ)

ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๊ณ , ๊ทธ ๊ถŒํ•œ์„ ์œ„์ž„๋ฐ›์•„ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

  • ์—ญํ• : ์‹ค์ œ๋กœ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค (์˜ˆ: ํ‹ฑํ†ก ์ƒต ์„œ๋น„์Šค๋ฅผ ์—ฐ๋™ํ•˜๋ ค๋Š” ์•ฑ)
  • ์‹๋ณ„ ๋ฐ ๋ณด์•ˆ: OAuth ์ œ๊ณต์ž์—๊ฒŒ ์‚ฌ์ „์— ๋“ฑ๋กํ•˜์—ฌ Client ID์™€ Client Secret์„ ๋ฐœ๊ธ‰๋ฐ›์Šต๋‹ˆ๋‹ค. Client ID๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๋ฉฐ, Client Secret์€ ํ† ํฐ ๊ตํ™˜ ๋‹จ๊ณ„์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์‹ ์›์„ ์ฆ๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Redirection URI: ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ์ฝœ๋ฐฑ(Callback) ์ฃผ์†Œ๋ฅผ ์ธ๊ฐ€ ์„œ๋ฒ„์— ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. Authorization Server (์ธ๊ฐ€ ์„œ๋ฒ„)

์ธ๊ฐ€ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ Access Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์—ญํ• ์„ ์ „๋‹ดํ•˜๋Š” ์ฃผ์ฒด์ž…๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„๋Š” ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ํ•ต์‹ฌ ๊ฒŒ์ดํŠธ์›จ์ด์ž…๋‹ˆ๋‹ค.

  • ์—ญํ• : ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ์˜ ์ธ์ฆ์„ ๊ฒ€์ฆํ•˜๊ณ (์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ํ™•์ธ), ์œ ํšจํ•  ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ธ๊ฐ€ ์ฝ”๋“œ(Authorization Code)์™€ ์ตœ์ข…์ ์œผ๋กœ Access Token์„ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: Google OAuth Server, TikTok Shop Open Authorization Center)
  • ๋ณด์•ˆ: Access Token ๋ฐœ๊ธ‰ ์‹œ, ํด๋ผ์ด์–ธํŠธ์˜ Client Secret์„ ๊ฒ€์ฆํ•˜์—ฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

4. Resource Server (๋ฆฌ์†Œ์Šค ์„œ๋ฒ„)

๋ฆฌ์†Œ์Šค ์„œ๋ฒ„๋Š” ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ Access Token์„ ๊ฒ€์ฆํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค(๋ฐ์ดํ„ฐ)๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ฃผ์ฒด์ž…๋‹ˆ๋‹ค.

  • ์—ญํ• : ์‹ค์ œ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: Google Calendar API, TikTok Shop Open API)
  • ์ธ๊ฐ€ ์ˆ˜ํ–‰: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ Access Token์˜ ์œ ํšจ์„ฑ๊ณผ, ํ† ํฐ์ด ๋ถ€์—ฌ๋œ ๊ถŒํ•œ ๋ฒ”์œ„(Scope)๊ฐ€ ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ์ง€ ํ™•์ธํ•œ ํ›„ ๋ฆฌ์†Œ์Šค๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. Access Token์ด ์—†๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ”ขOAuth 2.0์˜ ๋Œ€ํ‘œ ํ๋ฆ„ — Authorization Code Flow

 

OAuth 2.0์—๋Š” ์—ฌ๋Ÿฌ Grant Type์ด ์žˆ์ง€๋งŒ, ์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋ฐฉ์‹์€ Authorization Code Flow์ž…๋‹ˆ๋‹ค. ํ‹ฑํ†ก ์ƒต์˜ Open API Document ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ‹ฑํ†ก์ƒต OAuth ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด ํ๋ฆ„์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋ถ„์„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

0๋‹จ๊ณ„: ํด๋ผ์ด์–ธํŠธ ๋“ฑ๋ก ๋ฐ ์„ค์ •

OAuth๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์ œ๊ณต์ž์˜ API์— ์ €ํฌ์˜ ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Client ID: ์„œ๋น„์Šค์˜ ์‹๋ณ„์ž.
  • Client Secret: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์ธ์ฆ๋œ ์ฃผ์ฒด์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ.
  • Redirection URI: ๊ถŒํ•œ์„ ๋‹ค์‹œ ์„œ๋น„์Šค์—๊ฒŒ ๋ฐ˜ํ™˜๋ฐ›์„ ์—”๋“œํฌ์ธํŠธ. OAuth ์‚ฌ์šฉ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์กฐ๊ฑด์ด๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Scope (๊ถŒํ•œ ๋ฒ”์œ„): ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๋Š” API ๊ถŒํ•œ์˜ ์ข…๋ฅ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. (e.g. ์ƒํ’ˆ API, ์ฃผ๋ฌธ API, ๋ฌผ๋ฅ˜ API ๋“ฑ)

 

1๋‹จ๊ณ„: ์ธ๊ฐ€ ์ฝ”๋“œ ์š”์ฒญ ๋ฐ ์ธ์ฆ ์ˆ˜ํ–‰ (User Interaction)

์ด ๋‹จ๊ณ„๋Š” ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ(User)๊ฐ€ ํด๋ผ์ด์–ธํŠธ(Service/App)์—๊ฒŒ ๊ถŒํ•œ์„ ์œ„์ž„ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๊ฐ€ ์„œ๋ฒ„(Authorization Server)์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

๋‹จ๊ณ„ TikTok Shop OAuth ํ๋ฆ„ OAuth 2.0 ์—ญํ•  ์„ค๋ช…
โ‘ ~โ‘ก ์ดˆ๊ธฐ ์ง„์ž… User๊ฐ€ TikTok Shop ํŒŒํŠธ๋„ˆ ์„ผํ„ฐ์—์„œ Service/App์— ๋Œ€ํ•œ ๊ตฌ๋…/์‚ฌ์šฉ ์Šน์ธ์„ ํ•œ ํ›„, Service/App์˜ ์›น์‚ฌ์ดํŠธ(๋กœ๊ทธ์ธ ํŽ˜์ด์ง€) ๋งํฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ถŒํ•œ ์œ„์ž„์„ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ์ž…๋‹ˆ๋‹ค.
โ‘ข ์ธ๊ฐ€ ์š”์ฒญ (Authorization Request) Service/App์€ TikTok Shop Open Authorization Center์˜ ์ธ์ฆ ์„œ๋ฒ„ URL๋กœ User์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ service_id ๋˜๋Š” app_key (ํด๋ผ์ด์–ธํŠธ ์‹๋ณ„์ž)์™€ CSRF ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ state ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. client_id (app_key), redirect_uri, scope ๋“ฑ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์ธ๊ฐ€ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.
โ‘ฃ ์ธ์ฆ (Authentication) User๋Š” TikTok Shop Open Authorization Center์—์„œ ๊ณ„์ • ์ •๋ณด(์˜ˆ: ํŒ๋งค์ž ๋กœ๊ทธ์ธ)์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ง์ ‘ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ์ธ์ฆ ๊ณผ์ •์— ์ „ํ˜€ ๊ด€์—ฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ณ„์ • ์ •๋ณด๊ฐ€ ์œ ์ถœ๋  ์œ„ํ—˜์ด ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

 

 

2๋‹จ๊ณ„: ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐœ๊ธ‰ ๋ฐ ๊ตํ™˜ (Token Exchange)

User ์ธ์ฆ์ด ์™„๋ฃŒ๋œ ํ›„, ํด๋ผ์ด์–ธํŠธ(Service/App)๋Š” ์ธ๊ฐ€ ์ฝ”๋“œ(Auth Code)๋ฅผ ์ด์šฉํ•ด Access Token์„ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„์™€ ์ธ๊ฐ€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ง์ ‘ ํ†ต์‹ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

๋‹จ๊ณ„ TikTok Shop OAuth ํ๋ฆ„ OAuth 2.0 ์—ญํ•  ์„ค๋ช…
โ‘ค ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐœ๊ธ‰ (Authorization Code Grant) Authorization Center๋Š” ์ธ์ฆ์ด ์œ ํšจํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด, auth code๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์ „์— ๋“ฑ๋ก๋œ redirect URL (Callback URI)๊ณผ ํ•จ๊ป˜ User์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ Service/App์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ถŒํ•œ์„ ์ž„์‹œ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ผํšŒ์„ฑ ์ฝ”๋“œ๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.
โ‘ฅ Access Token ์š”์ฒญ (Token Request) Service/App ์„œ๋ฒ„๋Š” ์ˆ˜์‹ ํ•œ auth code๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Authorization Center์— Access Token ๋ฐœ๊ธ‰์„ ์ง์ ‘ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ app_key, app_secret, auth_code, grant_type (authorization_code), granted_scopes ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๊ฐ„์˜ ์•ˆ์ „ํ•œ ํ†ต์‹ ์„ ํ†ตํ•ด app_secret์„ ๊ฒ€์ฆํ•˜์—ฌ, ์š”์ฒญ ์ฃผ์ฒด๊ฐ€ ๋“ฑ๋ก๋œ ์ •์‹ ํด๋ผ์ด์–ธํŠธ์ž„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
โ‘ฆ Access Token ๋ฐœ๊ธ‰ Authorization Center๋Š” ์œ ํšจ์„ฑ์„ ํ™•์ธํ•œ ํ›„, access_token (์‹ค์ œ ๊ถŒํ•œ), refresh_token (ํ† ํฐ ๊ฐฑ์‹ ์šฉ), ๊ทธ๋ฆฌ๊ณ  open_id (์‚ฌ์šฉ์ž ์‹๋ณ„์ž, OIDC ์š”์†Œ)๋ฅผ ์‘๋‹ต ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ Service/App ์„œ๋ฒ„์— ์ง์ ‘ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„ ๋Œ€ ์„œ๋ฒ„ ํ†ต์‹ ์€ ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ HTTPS๋กœ ์•”ํ˜ธํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

3๋‹จ๊ณ„: ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ ๋ฐ ์„œ๋น„์Šค ์ œ๊ณต

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํš๋“ํ•œ Access Token์„ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์ ‘๊ทผํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

 

๋‹จ๊ณ„ TikTok Shop OAuth ํ๋ฆ„ OAuth 2.0 ์—ญํ•  ์„ค๋ช…
โ‘ง Open API ์š”์ฒญ (Resource Access) Service/App์€ ๋ฐœ๊ธ‰๋ฐ›์€ access_token์„ ํ—ค๋” ๋“ฑ์— ํฌํ•จํ•˜์—ฌ TikTok Shop Open API (๋ฆฌ์†Œ์Šค ์„œ๋ฒ„)์— ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. Access Token์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์œ„์ž„๋ฐ›์€ ๊ถŒํ•œ ๋ฒ”์œ„(Scope) ๋‚ด์—์„œ๋งŒ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
โ‘จ~โ‘ฉ ๊ฒฐ๊ณผ ํ‘œ์‹œ Open API๊ฐ€ ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, Service/App์€ ์ด๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ User์—๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์™„์„ฑํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ตœ์ข… ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก๋ฒˆ์™ธ - ์†Œ์…œ ๋กœ๊ทธ์ธ๊ณผ OpenID Connect (OIDC)

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด OAuth 2.0์„ ์†Œ์…œ ๋กœ๊ทธ์ธ์— ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์•ž์„œ ๊ฐ•์กฐํ–ˆ๋“ฏ์ด OAuth์˜ ๋ณธ์งˆ์€ ์ธ๊ฐ€(Authorization) ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

 

OAuth 2.0์„ ํ™œ์šฉํ•œ ์†Œ์…œ ๋กœ๊ทธ์ธ

OAuth๋Š” ์ธ๊ฐ€๋ฅผ ์œ„ํ•œ ๊ธฐ์ˆ ์ด์ง€๋งŒ, ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์‹๋ณ„ ์ •๋ณด๋ฅผ ์–ป์–ด ์ธ์ฆ(๋กœ๊ทธ์ธ)์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Access Token ํš๋“: ์œ„ 3๋‹จ๊ณ„๊นŒ์ง€ ๋™์ผํ•˜๊ฒŒ Access Token์„ ๋ฐœ๊ธ‰๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์š”์ฒญ: ํš๋“ํ•œ Access Token์„ ์ด์šฉํ•ด ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„(์‹๋ณ„์ž) ์ •๋ณด๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋น„์Šค ๋‚ด๋ถ€ ์ธ์ฆ: ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค์˜ ๋ณ„๋„ ๋ฉค๋ฒ„ DB์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์‹ ๊ทœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  4. ์„ธ์…˜ ์ƒ์„ฑ: ์„œ๋น„์Šค ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•  JWT ๋“ฑ์˜ ํ† ํฐ์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜, ๋กœ๊ทธ์ธ ์„ธ์…˜์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์˜: OAuth๊ฐ€ ID/PW ๊ด€๋ฆฌ๋ฅผ ์œ„์ž„ํ•ด ์ฃผ์ง€๋งŒ, ์‚ฌ์šฉ์ž์˜ ์ฐœ ์ •๋ณด, ์ผ์ • ๋“ฑ ์„œ๋น„์Šค ํŠนํ™” ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฉค๋ฒ„ DB ๊ตฌ์ถ•์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

 

 

OpenID Connect (OIDC)์˜ ๋“ฑ์žฅ

์ธ์ฆ(Authentication)์„ ๋ช…ํ™•ํžˆ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด OAuth 2.0 ์œ„์— ๊ตฌ์ถ•๋œ ๊ธฐ์ˆ ์ด ๋ฐ”๋กœ OpenID Connect์ž…๋‹ˆ๋‹ค.

  • ID Token: OIDC๋Š” Access Token ์š”์ฒญ ์‹œ, ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ID Token์˜ ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • JWT ๊ธฐ๋ฐ˜: ID Token์€ JWT(JSON Web Token) ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด, ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋””์ฝ”๋”ฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์‹๋ณ„์ž๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, OIDC๋ฅผ ์ง€์›ํ•˜๋Š” ์„œ๋น„์Šค๋ผ๋ฉด Access Token ๋Œ€์‹  ID Token์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์–ป์–ด์™€ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ‘œ์ค€์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

ํ‹ฑํ†ก ์ƒต์˜ Access Token ๋ฐœ๊ธ‰ ๋‹จ๊ณ„(โ‘ฆ) ์‘๋‹ต ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ณด๋ฉด open_id๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด open_id๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ๊ฐ’์œผ๋กœ, ์ด๋Š” OpenID Connect(OIDC) ๊ธฐ์ˆ ์ด OAuth 2.0 ๊ธฐ๋ฐ˜ ์œ„์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ(Authentication) ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ํ™•์žฅ๋˜์—ˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • OAuth 2.0์˜ ๋ณธ์งˆ: ์ธ๊ฐ€(Authorization)
  • OpenID Connect (OIDC): OAuth 2.0 ์œ„์— ๊ตฌ์ถ•๋˜์–ด ์ธ์ฆ(Authentication) ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•œ ํ”„๋กœํ† ์ฝœ. ID Token์ด๋‚˜ open_id ๊ฐ™์€ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

โœจ๋งˆ๋ฌด๋ฆฌ ํ•˜๋ฉฐ

OAuth 2.0์€ ์ธ๊ฐ€ ๊ณผ์ •์—์„œ ์ธ์ฆ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ„๋ฆฌํ•˜์—ฌ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ๋ฏผ๊ฐํ•œ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ ๋„ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ„์ž„๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ํ•ต์‹ฌ ๋ณด์•ˆ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

ํ˜„๋Œ€์˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ด ์ธ๊ฐ€(Authorization) ํ๋ฆ„์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ , ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ์‹œ OAuth์™€ OIDC์˜ ์ฐจ์ด์ ์„ ์ธ์ง€ํ•˜์—ฌ ํ‘œ์ค€์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€