[TIL] OAuth 2.0

Sooยท2023๋…„ 1์›” 18์ผ
0
post-thumbnail

โ“ OAuth 2.0 ์ด๋ž€?

  • ๊ฐ์ข… ์›น์ด๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํƒ€์‚ฌ์˜ API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์ธ์ฆ๊ณผ ๊ถŒํ•œ์„ ํš๋“ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

  • ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, ๋กœ๊ทธ์ธ์—์„œ๋ถ€ํ„ฐ ๊ฐ์ข… API๋ฅผ ๋ณด๋‹ค ์•ˆ์ „ํ•˜๊ณ  ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

  • OAuth 2.0์€ OAuth 1.0์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•ด์„œ ์—…๋ฐ์ดํŠธ ๋œ ๋ฒ„์ „์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๐ŸŸข ์žฅ์ ์ด ๋ญ”๋ฐ?

1) ์ด์šฉํ•˜๋ ค๋Š” ์„œ๋น„์Šค๋งˆ๋‹ค ํšŒ์›๊ฐ€์ž…์„ ํ•  ํ•„์š” ์—†์ด ๊ธฐ์กด์˜ ์‚ฌ์šฉํ•˜๋˜ ํƒ€์‚ฌ์˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ,
2) ์ •๋ณด๋Š” ํšŒ์›์ •๋ณด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ธฐํƒ€ API์— ๋Œ€ํ•œ ์ •๋ณด์—๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ 

๊ทธ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์ด์šฉ๋˜๋Š” ๊ณณ์ด ๋ฐ”๋กœ ํƒ€์‚ฌ์˜ ์ธ์ฆ๋œ ํšŒ์›์ •๋ณด๋ฅผ ํ†ตํ•œ ๋กœ๊ทธ์ธ์ด๋‹ค.

๐Ÿ“Œ Authentication (์ธ์ฆ) - ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ

  • ์ž์‹ ์ด A๋ผ๊ณ  ํ•˜๋Š” ๊ฐœ์ธ์ด ๊ณผ์—ฐ ์ •๋ง๋กœ A๊ฐ€ ๋งž๋Š”๊ฑด์ง€ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ํ–‰์œ„๋ฅผ ์˜๋ฏธํ•จ (์ธ์ฆ์ด ๋จ์œผ๋กœ์จ ์–ด๋– ํ•œ ์ƒํƒœ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์€ ์•„๋‹˜)
  • ์ธ์ฆ์„ ํ•จ์œผ๋กœ์จ A๋ผ๋Š” ์‚ฌ๋žŒ์˜ ์‹ ์›์ด ํ™•์ธ๋จ => A๊ฐ€ ์†Œ์œ ํ•œ ํŠน์ • ์ž์›์— ๋Œ€ํ•œ ์ฃผ๊ถŒ์„ ํ–‰์‚ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์ง€๋งŒ, ์ด ์ฃผ๊ถŒ์€ ์›๋ž˜๋ถ€ํ„ฐ A๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ฒƒ
  • ๋‹ค์‹œ๋งํ•ด, A๋ผ๋Š” ์‚ฌ๋žŒ์„ ์ธ์ฆํ•จ์œผ๋กœ์จ ์ด์ „์— ์—†๋˜ ์ฃผ๊ถŒ์ด ์ƒˆ๋กœ ์ƒ๊ธฐ์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ๋œป

๐Ÿ“Œ Authorization (์Šน์ธ) - ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ

  • ์ธ์ฆ์ด ๋˜๊ธฐ ์ „๊ณผ ํ›„, ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•œ ์ธก์ด๋‚˜ ์ธ์ฆ๋Œ€์ƒ์˜ ์ƒํƒœ์—๋Š” ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™”๊ฐ€ ์—†์Œ (์ธ์ฆ ์ „์— ์—†๋˜ ์ž๊ฒฉ์ด ์ธ์ฆ ํ›„์— ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ)
  • BUT, Authorization(์Šน์ธ)์€ ์ด์ „ ์ƒํƒœ์™€ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ์ƒํƒœ๊ฐ€ ๋จ. why? ์Šน์ธ ๋ฐ›์€ ๋Œ€์ƒ์€ ์ƒˆ๋กœ์šด ์ž๊ฒฉ์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ

๋‚˜๋Š”..

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ ์„œ๋น„์Šค์—์„œ Oauth 2.0๊ณผ passport๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์•„์ง Oauth์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ํ™•์‹คํ•˜๊ฒŒ ์žกํžˆ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„ Oauth์˜ ๊ฐœ๋…์„ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด๋ฉด์„œ ์ •๋ฆฌํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

๐Ÿ›  Oauth 2.0์˜ 4๊ฐ€์ง€ ๊ตฌ์„ฑ

๐Ÿ”ป Client (pillnuts)

  • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ ค๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ
  • Client๊ฐ€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๋ฉด์„œ Oauth2์˜ ์ ˆ์ฐจ์  ํ๋ฆ„์ด ์‹œ์ž‘๋˜๊ณ , Client๊ฐ€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋ฉด ๋์ด ๋‚œ๋‹ค.

๐Ÿ”ป Resource Server (Google, Apple, Kakao)

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์—ญํ• ๋ณด๋‹ค๋Š” ์ ‘๊ทผ ์š”์ฒญ์˜ ์œ ํšจ์„ฑ์„ ๋ถ„๋ณ„ํ•˜์—ฌ ์œ ์ €๊ฐ€ ๋™์˜ํ•œ Client์—๊ฒŒ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์ž„

๐Ÿ”ป Authorization Server

  • User ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•œ ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„

  • Client์˜ ์ ‘๊ทผ ์š”์ฒญ์— ๋”ฐ๋ผ, User์—๊ฒŒ Client์— ๋Œ€ํ•œ ๋“ฑ๋ก๋œ ์ •๋ณด ๋ฐ Client๊ฐ€ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ, ํ™œ์šฉํ•˜๋ ค๋Š” ๋ชฉ์  ๋ฐ ๊ธฐ๊ฐ„ ๋“ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•˜๊ณ , user์˜ ๋™์˜ ์—ฌ๋ถ€๋ฅผ ๋ฌป๋Š” ์—ญํ• 

  • ์†Œ๊ทœ๋ชจ ์‹œ์Šคํ…œ์ผ ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ๊ฐœ์ฒด๊ฐ€ Resource Server/ Authorization Server์˜ 2๊ฐ€์ง€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‚˜,
    ๊ทœ๋ชจ๊ฐ€ ํด์ˆ˜๋ก ๋ถ„๋ฆฌํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ

๐Ÿ”ปResource Owner (User)

  • Oauth 2.0์˜ ์ตœ๊ณ  ๊ถŒ๋ ฅ์ž
  • Resource Server ์ž…์žฅ: ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๋ฅผ ๋ถ€ํƒํ•œ ๊ณ ๊ฐ
  • Client ์ž…์žฅ: ๊ฐ€์น˜๋ฅผ ์ฐฝ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์ธ
  • Resource Owner๋Š” ์ž„์˜๋กœ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌ, ๊ฑฐ๋ถ€ ๋˜๋Š” ์ฒ ํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์ฒด์ž„
  • ์•„์šธ๋Ÿฌ, ์œ ์ €๋Š” ์ œ๊ณตํ•  ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„ ๋ฐ ๊ธฐ๊ฐ„ ๋“ฑ์— ๋Œ€ํ•œ ๊ฒฐ์ •๋„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Œ

๐Ÿ’พ OAuth 2.0์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ

  1. Client์˜ ๋“ฑ๋ก ์ •๋ณด
  • Oauth 2.0์ด ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด Client๋Š” ์‚ฌ์ „์— Resource Server์— ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค.
  • ์›นํŽ˜์ด์ง€ ๊ฐ™์€ ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ Redirect URI์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•จ
  1. Redirect URI
  • Resource Server๋Š” ์œ ์ €๊ฐ€ Client์—๊ฒŒ ๊ถŒํ•œ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์— ์œ ์ €๊ฐ€ ๋™์˜ ํ•˜๋ฉด, ์œ ์ €๋ฅผ Client์— ๋“ฑ๋ก๋œ Redirect URI๋กœ ์ด๋™(redirection) ์‹œํ‚จ๋‹ค.
  • ๋งŒ์•ฝ ๋“ฑ๋ก๋˜์ง€ ์•Š์€ Redirect URI๋ฅผ ๋‹ด์€ ์š”์ฒญ์„ ๋ฐ›๊ฒŒ ๋˜๋ฉด ๊ทธ ์š”์ฒญ์€ ๋ฌดํšจ์ฒ˜๋ฆฌ๊ฐ€ ๋จ
  • ๊ธฐ์กด์— ๋“ฑ๋ก๋œ Redirect URI์˜ ๋ฒ”์œ„ ํ•œํ•ด์„œ ์œ ์ €๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ด์œผ๋กœ์จ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฒฉ๋“ค์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ
  1. Client ID์™€ Client Secret
  • ์ƒˆ๋กœ ๋“ฑ๋กํ•œ ์•ฑ์€ Resource Server๋กœ๋ถ€ํ„ฐ ClientId์™€ Client Secert์„ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค.
  • Client ID๋Š” ๊ณต๊ฐœํ•˜๋Š” ์ •๋ณด๋กœ์„œ ๋กœ๊ทธ์ธ ์›นํŽ˜์ด์ง€ ๋˜๋Š” JS์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด์ด๋‹ค. ๋ฐ˜๋ฉด์—, Client Secret์€ ๋…ธ์ถœ์ด ๋˜๋ฉด ์•ˆ๋˜๋Š” ์ •๋ณด์ด๋‹ค. ๊ทธ๋ž˜์„œ Client Secret ๊ด€๋ฆฌ๋ฅผ ์ž˜ ํ•ด์•ผํ•œ๋‹ค.
profile
Soogineer's Devlog

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