๊ด€๋ฆฌ ๋ฉ”๋‰ด

<Hello Hosung๐Ÿ˜Ž/>

[Node.js] OAuth2 ๋กœ๊ทธ์ธ - 1 ๋ณธ๋ฌธ

๐Ÿ“ฑ JavaScript/ใ…คNode

[Node.js] OAuth2 ๋กœ๊ทธ์ธ - 1

์ขŒ์ถฉ์šฐ๋Œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ผ๊ธฐ๐Ÿง 2024. 11. 18. 14:37

OAuth2 ๋กœ๊ทธ์ธ์€ OAuth 2.0 ์ธ์ฆ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์™ธ๋ถ€ ์„œ๋น„์Šค(์˜ˆ: Google, Facebook, GitHub ๋“ฑ)๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์ƒˆ ๊ณ„์ •์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๊ธฐ์กด์˜ ์™ธ๋ถ€ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์ด๋‚˜ ์›น์‚ฌ์ดํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

OAuth2 ๋กœ๊ทธ์ธ์˜ ์ฃผ์š” ๊ฐœ๋…

  1. ๊ถŒํ•œ ๋ถ€์—ฌ(Authorization)
    ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. ์•ก์„ธ์Šค ํ† ํฐ(Access Token)
    ์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ๋ฐœ๊ธ‰ํ•˜๋Š” ์ž„์‹œ ํ‚ค๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  3. ๋ฆฌ๋‹ค์ด๋ ‰์…˜(Redirection)
    ์‚ฌ์šฉ์ž๋Š” OAuth ์ธ์ฆ ์„œ๋ฒ„๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋˜์–ด ๋กœ๊ทธ์ธ ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ์™„๋ฃŒ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ
    OAuth2๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ง์ ‘ ๊ณต์œ ํ•˜์ง€ ์•Š๊ณ , ์ œํ•œ๋œ ๊ถŒํ•œ์˜ ํ† ํฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

  1. ์‚ฌ์šฉ์ž ์š”์ฒญ
    ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ "Google๋กœ ๋กœ๊ทธ์ธ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ธ์ฆ ์„œ๋ฒ„๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ OAuth ์ œ๊ณต์ž(์˜ˆ: Google)์— ์ธ์ฆ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ
    ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠน์ • ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  4. ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰
    ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด OAuth ์ œ๊ณต์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  5. ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋ฐ ์‚ฌ์šฉ
    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ›์€ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•ด OAuth ์ œ๊ณต์ž์˜ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

 

OAuth2 ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์˜ ์žฅ์ 

  • ๊ฐ„ํŽธํ•จ: ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์ƒˆ๋กœ์šด ๊ณ„์ •์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ๊ฐ•ํ™”: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„ ์ ˆ์•ฝ: ๊ฐœ๋ฐœ์ž๋Š” ์ธ์ฆ ๋ฐ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋กœ์ง์„ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

OAuth2 ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ์‹œ ํ•„์š”ํ•œ ์ฃผ์š” ์‚ฌํ•ญ

  1. OAuth ์ œ๊ณต์ž ๋“ฑ๋ก
    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Google, Facebook, GitHub ๋“ฑ OAuth ์ œ๊ณต์ž์— ๋“ฑ๋กํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ID์™€ ๋น„๋ฐ€ ํ‚ค(Client Secret)๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. OAuth ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
    ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—๋Š” OAuth2 ๊ตฌํ˜„์„ ๋•๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: passport.js for Node.js)
  3. ์ฝœ๋ฐฑ URL ์„ค์ •
    OAuth ์ œ๊ณต์ž๊ฐ€ ์ธ์ฆ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ URL์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” Google OAuth Login ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์•Œ์•„ ๋ด…์‹œ๋‹ค.