๐Ÿ” | Kakao OAuth Login with supabase

NewHaยท2024๋…„ 8์›” 29์ผ
post-thumbnail

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์ด ๊ฒŒ์‹œ๊ธ€์€ ์„ค์ • ๋ฐฉ๋ฒ•๋งŒ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. supabase์˜ OAuth์˜ ๋™์ž‘์— ๋Œ€ํ•ด์„œ๋Š” ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

๐ŸŒฑ Kakao OAuth Login

OAuth(์˜คํ”ˆ ์ธ์ฆ)๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ œ3์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(supabase ๊ธฐ๋ฐ˜ ์•ฑ)์—์„œ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. Kakao OAuth๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„์˜ ํšŒ์›๊ฐ€์ž… ์—†์ด๋„ Kakao ๊ณ„์ •์„ ์‚ฌ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

โ˜€๏ธ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์„ค์ •

์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ณ„์ • - ์•ฑ ์ƒ์„ฑ ๋ฐ ๊ตฌ์„ฑ

๐Ÿ“ ์•ฑ ์ƒ์„ฑ โ€ข ๊ตฌ์„ฑ

์•ฑ์„ ์ƒ์„ฑโ€ข๊ตฌ์„ฑํ•จ์œผ๋กœ์จ Kakao๊ฐ€ OAuth ์ธ์ฆ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ํ•„์š”ํ•œ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๋“ฑ๋ก์„ ํ†ตํ•ด ์ธ์ฆ ์š”์ฒญ์— ์‚ฌ์šฉ๋˜๋Š” ๊ณ ์œ  client ID๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

  • Kakao Developer ์‚ฌ์ดํŠธ์—์„œ ๋กœ๊ทธ์ธ์„ ํ•˜๊ณ  My Application(๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฝ˜์†”์—์„œAdd an application(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถ”๊ฐ€ํ•˜๊ธฐ)๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์•ฑ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  Save(์ €์žฅ)ํ•ด ์•ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์šฉ API ์ƒ์„ฑ

  • ์‚ฌ์—…์ž ๋ฒˆํ˜ธ์™€ ๋„๋ฉ”์ธ ์ฃผ์†Œ๊ฐ€ ์—†๋‹ค๋ฉด, ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ํ…Œ์ŠคํŠธ์•ฑ์„ ์ƒ์„ฑํ•ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์นด์นด์˜ค๋น„์ฆˆ๋‹ˆ์Šค ํ†ตํ•ฉ ์„œ๋น„์Šค ์•ฝ๊ด€ ๋™์˜๋ฅผ ํ†ตํ•ด ์‚ฌ์—…์ž ๋ฒˆํ˜ธ ์—†์ด ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์นด์นด์˜ค 2๋‹จ๊ณ„ ์ธ์ฆ์ด ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์„ค์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ค์ •์„ ๋งˆ์นœ ํ›„ ์„œ๋น„์Šค ์•ฝ๊ด€์„ ๋™์˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์•ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

if...

  • ๋„๋ฉ”์ธ ์ฃผ์†Œ ํ˜น์€ Android / IOS ํŒจํ‚ค์ง€๋ช…์ด ์žˆ๋‹ค๋ฉด ์•ฑ ์„ค์ • > ํ”Œ๋žซํผ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š” ํ”Œ๋žซํผ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ์›น ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Kakao OAuth๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

REST API ํ‚ค ํ™•์ธ โ€ข ๋“ฑ๋ก

๐Ÿ“ REST API KEY

  • ์•ฑ์„ ์ƒ์„ฑํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์•ฑ ํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฐ, ๊ทธ ์ค‘ REST API ํ‚ค๋Š” Supabase์™€ Kakao API๊ฐ„ ํ†ต์‹ ์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฆ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค.
  • REST API ํ‚ค๋กœ supabase๋Š” Kakao๋กœ๋ถ€ํ„ฐ ์ธ์ฆ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์œผ๋ฉด ํ˜ธ์ถœ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
  • Product settings(์ œํ’ˆ ์„ค์ •)> App Keys(์•ฑ ํ‚ค)์—์„œ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค(REST API key)๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • API ํ‚ค๋Š” ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ด๋‹น REST API key๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ Supabase project dashboard > Authentication > Providers ์„น์…˜์˜ 'Kakao'์„ ํด๋ฆญํ•ด ์•„์ฝ”๋””์–ธ์„ ์—ด๊ณ  REST API Key์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

Redirect URI ์ถ”๊ฐ€

๐Ÿ“ Redirect URI

  • ์‚ฌ์šฉ์ž๊ฐ€ Kakao ๊ณ„์ฒญ์„ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•˜๊ณ  ๊ถŒํ•œ์„ ์Šน์ธํ•œ ํ›„, ์„œ๋ฒ„๋Š” ์ด URI๋กœ ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ ์š”์ฒญํ•œ ์ธ์ฆ ๊ฒฐ๊ณผ(์ธ์ฆ ์ฝ”๋“œ)์™€ ํ† ํฐ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. Supabase๋Š” ์ด ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • Kakao๊ฐ€ ์ธ์ฆ ํ›„์— ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐˆ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋ฏ€๋กœ 'Kakao Developer ์ฝ˜์†”'๊ณผ 'Supabase ์„ค์ •'์—์„œ ์ฃผ์†Œ๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋“ฑ๋กํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ KOE006 ์—๋Ÿฌ(์ธ์ฆ ์˜ค๋ฅ˜ ์—๋Ÿฌ)๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์ธ ํ›„ ๋žœ๋”ฉํŽ˜์ด์ง€, ์ถ”๊ฐ€ ์ •๋ณด ์ž…๋ ฅ ํŽ˜์ด์ง€ ๋“ฑ ์ƒํ™ฉ์— ๋งž๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋„๋ก ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์ธ ๊ณผ์ • ์ค‘ ํŠน์ • ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ์ „๋‹ฌํ•˜๋ ค๋ฉด state ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • REST API key๋ฅผ ์„ค์ •ํ•œ Supabase ํŽ˜์ด์ง€์—์„œ Callback URL์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • Product settings > Kakao Login > Redirect URI ์— ๋ณต์‚ฌํ•ด๋‘” Callback URL๋ฅผ ๋ถ™์—ฌ๋„ฃ์–ด ์ค๋‹ˆ๋‹ค.

Client-Secret ์ƒ์„ฑ & ํ™œ์„ฑํ™”

๐Ÿ“ Client-Secret

  • OAuth ์ธ์ฆ ๊ณผ์ •์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹๋ณ„ํ•˜๊ณ , ์š”์ฒญ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜จ ๊ฒƒ์ž„์„ ์ฆ๋ช…ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • supabase๊ฐ€ Kakao๋กœ๋ถ€ํ„ฐ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•  ๋•Œ, ๋ฏธ๋ฆฌ ๋ฐœ๊ธ‰๋ฐ›์€ Client-secret์„ ํŒŒ๋ผ๋ฏธํ„ฐ์— ํฌํ•จ์‹œ์ผœ ํ•จ๊ป˜ ์ „์†กํ•œ ๊ฒฝ์šฐ์—๋งŒ ์„ฑ๊ณต ์‘๋‹ตํ•˜๋„๋ก ์„ค์ •ํ•ด ์ธ์ฆ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ์„ ๊ฐ•ํ™”ํ•˜๋Š” ๋ณด์•ˆ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • Product settings > Kakao Login ์—์„œ ์Šค์œ„์น˜๋ฅผ ํด๋ฆญํ•ด์„œ ํ™œ์„ฑํ™”ํ•ด์ค๋‹ˆ๋‹ค.

  • Security(๋ณด์•ˆ)์œผ๋กœ ์ด๋™ํ•ด generate code(์ฝ”๋“œ ์ƒ์„ฑ)์„ ํด๋ฆญํ•ด Client Secret๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • Activation state(ํ™œ์„ฑํ™” ์ƒํƒœ)์—์„œ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐœ๊ธ‰๋œ ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ ์ฝ”๋“œ๋Š” ํ™œ์„ฑํ™” ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ƒ์„ฑํ•œ Client Secret ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ supabase project dashboard > Authentication > Providers ์—์„œ Kakao์— Client Secret Code์— ์ž…๋ ฅํ•˜๊ณ  saveํ•ฉ๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ฑฐ๋‚˜ ์œ ์ถœ์ด ์˜์‹ฌ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์žฌ๋ฐœ๊ธ‰์œผ๋กœ ์ƒˆ ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฌ๋ฐœ๊ธ‰ ๋ฐ›์œผ๋ฉด ์šด์˜ ์ค‘์ธ ์„œ๋น„์Šค๋ผ๋ฉด, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํ† ํฐ ๋ฐœ๊ธ‰ ์š”์ฒญ์ด ๋ชจ๋‘ ์‹คํŒจํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์šด์˜ ์ค‘์ธ ๊ฒฝ์šฐ์—๋Š” ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๋™์˜ ํ•ญ๋ชฉ ์„ค์ •

๐Ÿ“ ์‚ฌ์šฉ์ž ๋™์˜ ํ•ญ๋ชฉ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ๋˜๊ณ , ์‚ฌ์šฉ์ž ์ •๋ณด ์ค‘ ์–ด๋–ค ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •์˜ํ•˜๊ณ , ์„ค์ •๋œ ๋™์˜ ํ•ญ๋ชฉ์— ๋”ฐ๋ผ ๋กœ๊ทธ์ธ ์‹œ์— Kakao๊ฐ€ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋™์˜ํ•œ ํ•ญ๋ชฉ์— ํ•œํ•ด์„œ๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•ด๋‹น ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์˜ํ•˜์ง€ ์•Š์œผ๋ฉด Supabase๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ œ๋Œ€๋กœ ์ˆ˜์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • Kakao Login > Consent Items(๋™์˜ ํ•ญ๋ชฉ)์—์„œ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ๋ณ„ '์„ค์ •'์œผ๋กœ ์‚ฌ์šฉ ์—ฌ๋ถ€์™€ ๋™์˜ ๋‹จ๊ณ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 'account_eamil(์นด์นด์˜ค๊ณ„์ •)', 'profile_image(ํ”„๋กœํ•„ ์‚ฌ์ง„)', 'profile_nickname(๋‹‰๋„ค์ž„)'์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ์•ผ ์˜ค๋ฅ˜์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ˜€๏ธ ๊ฐ„ํŽธ ๊ฐ€์ž… ์„ค์ •

๊ฐ„ํŽธ๊ฐ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด Kakao Login์„ ํ†ตํ•ด ํšŒ์›๊ฐ€์ž…๊นŒ์ง€ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค ์•ฝ๊ด€์ด 1๊ฐœ ์ด์ƒ์ด์–ด์•ผ ํ™œ์„ฑํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. '์„œ๋น„์Šค ์•ฝ๊ด€ ์ถ”๊ฐ€' ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์•ฝ๊ด€์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ํ•œ ๋’ค์— ์‚ฌ์šฉ์—ฌ๋ถ€์—์„œ OFF โ†’ ON ์œผ๋กœ ์Šค์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.

โ˜€๏ธ OpenID Connect ํ™œ์„ฑํ™” ์„ค์ •

OepnID Connect(OIDC)
์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ์ธ์ฆ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.
ํ™œ์„ฑํ™”ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด IDํ† ํฐ์„ ์•ก์„ธ์Šค ํ† ํฐ๊ณผ ํ•จ๊ป˜ ๋ฐœ๊ธ‰๋ฐ›๊ณ , ํ‘œ์ค€ ๊ทœ๊ฒฉ์„ ์ค€์ˆ˜ํ•œ ํ˜•ํƒœ์˜ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • OpenID Connect๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์‹œ ์•ก์„ธ์Šค ํ† ํฐ๊ณผ IDํ† ํฐ์„ ํ•จ๊ป˜ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kakao Login ์—์„œ OpenID Connect๋ฅผ ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒˆ Reference

profile
๋ฐฑ ๋ฒˆ์„ ๋ณด๋ฉด ํ•œ ๊ฐ€์ง€๋Š” ์•ˆ๋‹ค ๐Ÿ‘€

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