/login-with-OAuth

CRA & NestJS boilerplate for OAuth/Social login (Full stack)

Primary LanguageTypeScript

๐Ÿ”’ OAuth

Demonstration.video.mp4

๐Ÿ”„ OAuth Login Flow

sequenceDiagram
    participant A as Fronted App (Web, Mobile, Desktop)
    participant B as Backend App
    participant C as External Auth Services (Kakao, Naver, Google, etc)

    A->>B: 1. Request social login
    B->>A: 2. Redirect to social login page
    A->>C: 3. Login with social account
    C->>B: 4. Send Authorize Code to Redirect URI
    B->>C: 5. Request exchange Authorize Code for Token
    C->>B: 6. Send Access Token and Refresh Token
    B->>C: 7. Request user information with Access Token
    C->>B: 8. Send user information containing unique Social ID
    B->>B: 9. Issue JWT-based Access Token and Refresh Token
    B->>A: 10. Redirect to app with Access Token and Refresh Token <br> (Both set in cookie)
    A->>B: 11. Make any requests with JWT cookie
Loading

โ€ป RTR(Refresh Token Rotation) ์ „๋žต ์‚ฌ์šฉ

๐ŸŸจ Kakao OAuth

Kakao Developers ์‚ฌ์ „ ์ž‘์—…

  1. https://developers.kakao.com/console/app > ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถ”๊ฐ€ํ•˜๊ธฐ

  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ ํƒ

  3. ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ > ์•ฑ ์„ค์ • > ์š”์•ฝ ์ •๋ณด

    • ์•ฑ ํ‚ค > REST API ํ‚ค (์ธ๊ฐ€ ์ฝ”๋“œ ์š”์ฒญ ์‹œ ํ•„์š”)
  4. ํ”Œ๋žซํผ > ํ”Œ๋žซํผ ์„ค์ •ํ•˜๊ธฐ > Web > ์‚ฌ์ดํŠธ ๋„๋ฉ”์ธ: https://localhost:3000

  5. Redirect URI ๋“ฑ๋กํ•˜๋Ÿฌ ๊ฐ€๊ธฐ

  6. ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ > ์ œํ’ˆ ์„ค์ • > ์นด์นด์˜ค ๋กœ๊ทธ์ธ > ๋ณด์•ˆ > Client Secret > ์ฝ”๋“œ ์ƒ์„ฑ (์„ ํƒ)

    • ํ™œ์„ฑํ™” ์ƒํƒœ: ์‚ฌ์šฉํ•จ
  7. ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ > ์ œํ’ˆ ์„ค์ • > ์นด์นด์˜ค ๋กœ๊ทธ์ธ > ๋™์˜ํ•ญ๋ชฉ

    • ๋‹‰๋„ค์ž„
    • ํ”„๋กœํ•„ ์‚ฌ์ง„
    • ์นด์นด์˜ค๊ณ„์ •(์ด๋ฉ”์ผ) ์„ค์ • ๐Ÿ‘ˆ ๋น„์ฆˆ์•ฑ์œผ๋กœ ์ „ํ™˜ํ•ด์•ผ ๋™์˜ํ•ญ๋ชฉ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์ถ”ํ›„ ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ฐ›์„ ๋•Œ scope์™€ ๊ด€๋ จ ์žˆ๋‹ค.

Diagram

Kakao Developers์—์„œ ์ œ๊ณตํ•˜๋Š” ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ๋‚˜ํƒ€๋‚ธ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ
  • Server์—์„œ Kakao Auth Server๋กœ ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐ›๊ธฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด Client์— ์นด์นด์˜ค๊ณ„์ • ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๋œจ์ง€ ์•Š๋Š”๋‹ค. Server์—์„œ ์š”์ฒญ์„ ๋ณด๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด์ฉŒ๋ฉด ๋‹น์—ฐํ•˜๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์—์„œ ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐ›๊ธฐ URL๋กœ redirect๋ฅผ ์‹œ์ผœ๋ณด๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ์˜ port๊ฐ€ ๋‹ฌ๋ผ CORS ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ๊ฒฐ๊ตญ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” Client์—์„œ ์ง์ ‘ Kakao Auth Server๋กœ ์ฝ”๋“œ ๋ฐ›๊ธฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ํ–ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์ฐพ์•„๋ณด๋‹ˆ CORS ์˜ค๋ฅ˜๋Š” Ajax ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๊ณ  a ํƒœ๊ทธ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. a ํƒœ๊ทธ๋กœ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„์—์„œ ๋‹ค์‹œ redirect๋ฅผ ํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ๋‹ค.
  • REDIRECT_URI๋ฅผ server api๋กœ ์„ค์ •ํ–ˆ์„ ๋•Œ client๋„ ํ•ด๋‹น URI๋กœ ์ด๋™ํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ server์—์„œ redirectํ•˜๋„๋ก ํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.

Kakao-OAuth drawio

๐ŸŸฉ Naver OAuth

  1. https://developers.naver.com/apps/#/wizard/register > ์•ฝ๊ด€๋™์˜ > ๊ณ„์ • ์ •๋ณด ๋“ฑ๋ก > ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก
    • ์‚ฌ์šฉ API: ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ
      • ๊ถŒํ•œ: ํšŒ์›์ด๋ฆ„, ์—ฐ๋ฝ์ฒ˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ, ๋ณ„๋ช…, ํ”„๋กœํ•„ ์‚ฌ์ง„ โœ”๏ธ
    • ๋กœ๊ทธ์ธ ์˜คํ”ˆ API ์„œ๋น„์Šค ํ™˜๊ฒฝ: PC ์›น
  2. ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ > ๊ฐœ์š”
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด
      • Client ID
      • Client Secret
    • ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ
      • ๊ฐœ๋ฐœ ์ƒํƒœ (๊ฐœ๋ฐœ ์ค‘)

        ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด โ€˜๊ฐœ๋ฐœ ์ค‘โ€˜ ์ƒํƒœ์ด๋ฉด [๋ฉค๋ฒ„๊ด€๋ฆฌ] ํƒญ์—์„œ ๋“ฑ๋กํ•œ ์•„์ด๋””๋งŒ ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜์–ด ์‹ค ์„œ๋น„์Šค์— ์ ์šฉํ•˜๊ณ ์ž ํ•˜์‹ ๋‹ค๋ฉด ๊ฒ€์ˆ˜๋ฅผ ์š”์ฒญํ•ด ์ฃผ์„ธ์š”. ๊ฒ€์ˆ˜๊ฐ€ ์Šน์ธ๋˜๋ฉด ๋ชจ๋“  ์•„์ด๋””๋กœ ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ > ๋ฉค๋ฒ„๊ด€๋ฆฌ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ์„ค์ž๋Š” ๋“ฑ๋กํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.)
    • ๊ด€๋ฆฌ์ž ID ๋“ฑ๋ก
    • ํ…Œ์Šคํ„ฐ ID ๋“ฑ๋ก

Diagram

Naver-OAuth drawio

๐ŸŸฆ Google OAuth

Google Cloud Console ์‚ฌ์ „ ์ž‘์—…

  1. https://console.cloud.google.com > ํ”„๋กœ์ ํŠธ ์„ ํƒ > ์ƒˆ ํ”„๋กœ์ ํŠธ
  2. ์™ผ์ชฝ ํƒ์ƒ‰ ๋ฉ”๋‰ด > API ๋ฐ ์„œ๋น„์Šค
    1. OAuth ๋™์˜ ํ™”๋ฉด > User Type: ์™ธ๋ถ€ > ๋งŒ๋“ค๊ธฐ
      • OAuth ๋™์˜ ํ™”๋ฉด (๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€๋„ ๋˜๋Š” ๋“ฏ)
        • ์•ฑ ๋„๋ฉ”์ธ > ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™ˆํŽ˜์ด์ง€: http://localhost:3000
      • ๋ฒ”์œ„ (์ถ”ํ›„ ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐœ๊ธ‰ ์‹œ scope์— ์‚ฌ์šฉ๋จ)
        • ๋ฒ”์œ„ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ > email, profile โœ”๏ธ > ์—…๋ฐ์ดํŠธ
      • ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ์ž
        • ๋ณธ์ธ ๋ฉ”์ผ ์ถ”๊ฐ€
    2. ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด > ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ๋งŒ๋“ค๊ธฐ > OAuth ํด๋ผ์ด์–ธํŠธ ID
      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ํ˜•: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
      • ์Šน์ธ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์›๋ณธ: http://localhost:3000
      • ์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI: http://localhost:3001/api/auth/google/callback
    3. ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด > OAuth 2.0 ํด๋ผ์ด์–ธํŠธ ID > ๋ฐฉ๊ธˆ ๋งŒ๋“  ์›น ํด๋ผ์ด์–ธํŠธ ํด๋ฆญ
      • ํด๋ผ์ด์–ธํŠธ ID
      • ํด๋ผ์ด์–ธํŠธ ๋ณด์•ˆ ๋น„๋ฐ€๋ฒˆํ˜ธ

Diagram

Google-OAuth drawio

๊ธฐ์ˆ  ์Šคํƒ