๐Ÿ” | Google OAuth Login with supabase

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

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

๐ŸŒฑ Google OAuth Login

์‚ฌ์šฉ์ž๊ฐ€ Google ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ˜€๏ธ Google OAuth ์—ฐ๊ฒฐ ์ค€๋น„

Google Cloud Platform : ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ์„ค์ •

  • Google Cloud Platform(๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ํŽ˜์ด์ง€)์—์„œ ๋กœ๊ทธ์ธํ•˜๊ณ  ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • API > ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  • OAuth ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— OAuth ๋™์˜ ํ™”๋ฉด์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ OAuth ๋™์˜ ํ™”๋ฉด

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

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

OAuth ํด๋ผ์ด์–ธํŠธ ID ์ƒ์„ฑ

  • ๋‹ค์‹œ API > ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ OAuth ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ํ˜•์„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์•„๋ž˜๋กœ ์„ค์ • ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์ด๋ฆ„์„ ์ ๊ณ  ์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI์—์„œ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

  • Supabase dashboard ์—์„œ Authentication > Providers ์—์„œ Google์„ ํด๋ฆญํ•ด ์—ด๊ณ  ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. Callback URL์„ ๋ณต์‚ฌํ•˜๊ณ  ์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI์— ๋ถ™์—ฌ๋„ฃ์–ด ์ฃผ๊ณ  save ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ Redirection URI

  • ์‚ฌ์šฉ์ž๊ฐ€ Google ๋กœ๊ทธ์ธ์œผ๋กœ ์ธ์ฆ์„ ์™„๋ฃŒํ•œ ํ›„, Google์€ ์‚ฌ์šฉ์ž๋ฅผ ์ด URI๋กœ redirectionํ•ฉ๋‹ˆ๋‹ค. ์ด ๋–„, ์ธ์ฆ์ฝ”๋“œ๊ฐ€ URI์— ํฌํ•จ๋˜์–ด ์ „์†ก๋˜๊ณ , ํ•ด๋‹น ์ฝ”๋“œ๋กœ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Supabase console์— Google ์ธ์ฆ ์ •๋ณด ์ž…๋ ฅ

๐Ÿ“ *OAuth Client

  • ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(supabase)์ด Google์— ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Client ID : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Client Secret (ํด๋ผ์ด์–ธํŠธ ๋ณด์•ˆ ๋น„๋ฐ€๋ฒˆํ˜ธ) : ๋ณด์•ˆ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์š”์ฒญํ•˜๊ณ  ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ํš๋“ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • OAuth ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋œน๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ๋ณต์‚ฌํ•ด์„œ supabase google์„ค์ •์˜ Client ID์— ๋ถ™์—ฌ๋„ฃ์–ด ์ค๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ํด๋ผ์ด์–ธํŠธ ๋ณด์•ˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋„ ๋ณต์‚ฌํ•ด์„œ supabase google ์„ค์ •์˜ Client Secret์— ๋ถ™์—ฌ๋„ฃ์–ด ์ฃผ๋ฉด ๊ธฐ๋ณธ ์„ค์ •์ด ๋๋‚ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์„ค์ •

๐Ÿ“ ๋ฒ”์œ„(Scope) ์„ค์ •

  • ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๋ถ€์—ฌ : ๋ฒ”์œ„(scope)์„ค์ •์€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ Google ๊ณ„์ •์— ์ €์žฅ๋œ ํŠน์ • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ช…์‹œ์ ์œผ๋กœ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ : ๋ฒ”์œ„ ์„ค์ •์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ณ  ๊ฑฐ๋ถ€ํ•˜์—ฌ ์ž์‹ ์˜ ๊ฐœ์ธ์ •๋ณด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ๋ฐ ์„œ๋น„์Šค > ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ ์ด๋™ํ•ด์„œ people์„ ๊ฒ€์ƒ‰ํ•ด Google People API๋ฅผ ์‚ฌ์šฉ ์„ค์ • ํ•ฉ๋‹ˆ๋‹ค.

  • OAuth ๋™์˜ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•ด ๋ฒ”์œ„(scope) ์„ค์ •์—์„œ ๋ฒ”์œ„ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  openID์™€ People API ๊ด€๋ จ๋œ ํ•„ํ„ฐ๋ง์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.

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

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