- [oauth] ์นด์นด์ค ๋ก๊ทธ์ธ ์ดํดํ๊ธฐ2024๋ 01์ 09์ผ 21์ 36๋ถ 42์ด์ ์ ๋ก๋ ๋ ๊ธ์ ๋๋ค.์์ฑ์: @kimyu0218
์นด์นด์ค ๋ก๊ทธ์ธ ์ดํดํ๊ธฐ
๋ก๊ทธ์ธ ๊ณผ์
์๋ ๋ค์ด์ด๊ทธ๋จ์ ์นด์นด์ค ๋ก๊ทธ์ธ์ ์ด์ฉํ ์๋น์ค ๋ก๊ทธ์ธ ๊ณผ์ ์ ๋ํ๋ธ ๊ฒ์ด๋ค.
์ฌ์ฉ์ ํด๋ผ์ด์ธํธ, ์๋น์ค ์๋ฒ, ์นด์นด์ค ์ธ์ฆ ์๋ฒ, ์นด์นด์ค 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)
`ํ ํฐ ๋ฐ๊ธฐ`๋ฅผ ์์ฒญํ๋ฉด ์นด์นด์ค ์ธ์ฆ ์๋ฒ์์ ์์ ์๋ต์ ์ ์กํ๋ค. ํด๋น ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํํ๊ณ , ์กด์ฌํ์ง ์๋ ํ์์ ๋ํด ํ์ ๊ฐ์ ์ ์งํํ๊ณ ๋ก๊ทธ์ธ๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
์ฐธ๊ณ ์๋ฃ
'backend > oauth' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[oauth] ์นด์นด์ค ๋ก๊ทธ์ธ ์์ํ๊ธฐ (์ดํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก/์นด์นด์ค ๋ก๊ทธ์ธ ํ์ฑํ) (0) 2024.01.09 [oauth] OAuth 2.0์ ๋์์๋ฆฌ (1) 2024.01.09 ๋ค์๊ธ์ด ์์ต๋๋ค.์ด์ ๊ธ์ด ์์ต๋๋ค.๋๊ธ