kimyu0218
  • [oauth] ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์ดํ•ดํ•˜๊ธฐ
    2024๋…„ 01์›” 09์ผ 21์‹œ 36๋ถ„ 42์ดˆ์— ์—…๋กœ๋“œ ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค.
    ์ž‘์„ฑ์ž: @kimyu0218

    ๐Ÿ”— OAuth 2.0์˜ ๋™์ž‘์›๋ฆฌ

    ๐Ÿ”— ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์‹œ์ž‘ํ•˜๊ธฐ

     

    ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์ดํ•ดํ•˜๊ธฐ

    ๋กœ๊ทธ์ธ ๊ณผ์ •

    ์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ์ด์šฉํ•œ ์„œ๋น„์Šค ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

    ์‚ฌ์šฉ์ž ํด๋ผ์ด์–ธํŠธ, ์„œ๋น„์Šค ์„œ๋ฒ„, ์นด์นด์˜ค ์ธ์ฆ ์„œ๋ฒ„, ์นด์นด์˜ค API ์„œ๋ฒ„๋ฅผ OAuth ์—ญํ• ์— ๋งคํ•‘ํ•ด๋ดค๋‹ค. 

    • ์‚ฌ์šฉ์ž ํด๋ผ์ด์–ธํŠธ == ํด๋ผ์ด์–ธํŠธ FE
    • ์„œ๋น„์Šค ์„œ๋ฒ„ == ํด๋ผ์ด์–ธํŠธ BE
    • ์นด์นด์˜ค ์ธ์ฆ ์„œ๋ฒ„ == ์ธ๊ฐ€ ์„œ๋ฒ„
    • ์นด์นด์˜ค API ์„œ๋ฒ„ == ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„

     

    Step 1 : ์นด์นด์˜ค ๋กœ๊ทธ์ธ

    ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค์—์„œ `์นด์นด์˜ค ๋กœ๊ทธ์ธ` ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด, ์„œ๋น„์Šค๋Š” ์นด์นด์˜ค ์ธ์ฆ ์„œ๋ฒ„๋กœ ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•˜๊ฒŒ ๋œ๋‹ค. ์นด์นด์˜ค ์ธ์ฆ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ธ์ฆ์„ ์š”์ฒญํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด ์„œ๋น„์Šค์˜ ๋™์˜ ํ•ญ๋ชฉ ์„ค์ •์„ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์˜ ํ™”๋ฉด์„ ์ „๋‹ฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์ˆ˜ ๋™์˜ ํ•ญ๋ชฉ์— ๋™์˜ํ•˜๊ณ  ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•˜๋ฉด ์นด์นด์˜ค ์ธ์ฆ์„œ๋ฒ„๋Š” ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ URI(์„œ๋น„์Šค)๋กœ ์ „๋‹ฌํ•œ๋‹ค. ์„œ๋น„์Šค๋Š” ์ „๋‹ฌ๋ฐ›์€ ์ธ๊ฐ€ ์ฝ”๋“œ๋กœ ํ† ํฐ์„ ์š”์ฒญํ•œ๋‹ค.
     

     Step 2 : ํšŒ์› ํ™•์ธ ๋ฐ ๊ฐ€์ž…

    ์„œ๋น„์Šค๋Š” ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์š”์ฒญํ•œ๋‹ค. ์นด์นด์˜ค API ์„œ๋ฒ„๋Š” ํ† ํฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ์„œ๋น„์Šค์˜ ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค. ์„œ๋น„์Šค๋Š” ์นด์นด์˜ค๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋ฐ›์€ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด๋ฏธ ๊ฐ€์ž…๋œ ํšŒ์›์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ์ด๋ฏธ ๊ฐ€์ž…๋œ ํšŒ์›์˜ ๊ฒฝ์šฐ, ๋กœ๊ทธ์ธ ์™„๋ฃŒ ์ฒ˜๋ฆฌ๋ฅผ, ๊ฐ€์ž…๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํšŒ์› ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
     

    Step 3 : ์„œ๋น„์Šค ๋กœ๊ทธ์ธ

    ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ธ์…˜์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ๋กœ๊ทธ์ธ๋œ ์„œ๋น„์Šค ํ™”๋ฉด์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.
     


    ์ธ์ฆ

    ์ธ์ฆ๊ณผ ์ธ๊ฐ€์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž. ์‚ฌ์šฉ์ž๋Š” ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์„œ๋น„์Šค์— ๋กœ๊ทธ์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์นด์นด์˜ค ๋กœ๊ทธ์ธ์€ ์นด์นด์˜ค ๊ณ„์ •์˜ ์ž๊ฒฉ ์ •๋ณด๋กœ ์‚ฌ์šฉ์ž ์‹ ์›์„ ์ธ์ฆํ•œ๋‹ค. ์ฆ‰, ์„œ๋น„์Šค๋Š” ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ ์ •๋ณด๋ฅผ ์ œ๊ณต ๋ฐ›๊ณ , ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›์ง€ ์•Š๊ณ ๋„ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
     

    ์ธ๊ฐ€

    ์นด์นด์˜ค ๋กœ๊ทธ์ธ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด ๋™์˜ ํ™”๋ฉด์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ธ๊ฐ€๋ฅผ ์š”์ฒญํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋™์˜ํ•ญ๋ชฉ์— ๋™์˜ํ•˜๋ฉด ์นด์นด์˜ค ๋กœ๊ทธ์ธ์€ ์‚ฌ์šฉ์ž์˜ ๋™์˜ ๋‚ด์—ญ์„ ์ธ๊ฐ€ ์ฝ”๋“œ์— ๋‹ด์•„์„œ ์„œ๋น„์Šค์— ์ „๋‹ฌํ•œ๋‹ค.
     


    JS๋ฅผ ์ด์šฉํ•œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ

    ์ด์ œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ SDK๋ฅผ ์ด์šฉํ•˜์—ฌ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค!

    ์„œ๋น„์Šค๋Š” ์„œ๋“œ ํŒŒํ‹ฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ OAuth์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์„œ๋น„์Šค ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋น„์Šค์˜ ์›น ๋ธŒ๋ผ์šฐ์ €, ์„œ๋ฒ„๋Š” ์„œ๋น„์Šค์˜ ์›น ์„œ๋ฒ„๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
     

    Step 1 : ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ (FE & BE)

    Kakao.Auth.authorize({
      redirectUri: '${REDIRECT_URI}',
    });

    ์‚ฌ์šฉ์ž๊ฐ€ `์นด์นด์˜ค ๋กœ๊ทธ์ธ` ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์„œ๋น„์Šค๋Š” `Kakao.Auth.authorize()` ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์นด์นด์˜ค ์ธ์ฆ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์˜ ์„ ํƒ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์•„ `redirectUri`๋กœ ์ „๋‹ฌํ•œ๋‹ค.

    - โœ… ๋™์˜ : `redirectUri`๋กœ ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋‹ด์€ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ์ „๋‹ฌ
    - โŽ ์ทจ์†Œ : `redirectUri`๋กœ ์—๋Ÿฌ ์ •๋ณด๋ฅผ ๋‹ด์€ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ์ „๋‹ฌ

    ๊ฐ„ํŽธ๋กœ๊ทธ์ธ ํ™•์ธํ•˜๊ธฐ (+ ํŒŒ๋ผ๋ฏธํ„ฐ ์ •๋ณด)

     

    Step 2 : ํ† ํฐ ๋ฐ›๊ธฐ (BE)

    curl -v -X POST "https://kauth.kakao.com/oauth/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=authorization_code" \
     -d "client_id=${REST_API_KEY}" \
     --data-urlencode "redirect_uri=${REDIRECT_URI}" \
     -d "code=${AUTHORIZE_CODE}"

    ์„œ๋น„์Šค ์„œ๋ฒ„๋Š” ์ธ๊ฐ€ ์ฝ”๋“œ๋กœ ํ† ํฐ ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•œ๋‹ค. ํ•„์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ธ๊ฐ€ ์„œ๋ฒ„์— POST ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค.

    ํ† ํฐ ์š”์ฒญ์‹œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ

     

    Step 3 : ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ (BE)

    `ํ† ํฐ ๋ฐ›๊ธฐ`๋ฅผ ์š”์ฒญํ•˜๋ฉด ์นด์นด์˜ค ์ธ์ฆ ์„œ๋ฒ„์—์„œ ์œ„์˜ ์‘๋‹ต์„ ์ „์†กํ•œ๋‹ค. ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ณ , ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํšŒ์›์— ๋Œ€ํ•ด ํšŒ์› ๊ฐ€์ž…์„ ์ง„ํ–‰ํ•˜๊ณ  ๋กœ๊ทธ์ธ๋œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

     


    ์ฐธ๊ณ ์ž๋ฃŒ

    ๋Œ“๊ธ€