TIL 58: [์ธ์ฆ/๋ณด์•ˆ] ๊ธฐ์ดˆ - OAuth 2.0

์ฝ”๋”ฉ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์ด ์ƒ๊ฒจ ์˜ฌํ•ด ์ดˆ์— ์ž ๊น ์ƒํ™œ์ฝ”๋”ฉ์œผ๋กœ HTML๊ณผ CSS๋ฅผ ๊ณต๋ถ€ํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋•Œ OAuth๊ฐ€ ๋ญ”์ง€์— ๋Œ€ํ•ด ์ž์„ธํ•œ ์„ค๋ช…์—†์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ด๋ดค๋Š”๋ฐ ์ด๋ฒˆ ๊ธฐํšŒ๋ฅผ ํ†ตํ•ด OAuth๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

OAuth๋ž€?

์ง์ ‘ ์ž‘์„ฑํ•œ ์„œ๋ฒ„์—์„œ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, OAuth๋Š” ์ธ์ฆ์„ ์ค‘๊ฐœํ•ด์ฃผ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋ณด์•ˆ๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์›น์„œ๋น„์Šค(GitHub, google, facebook ๋“ฑ)์—์„œ ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์„ ๋Œ€์‹ ํ•ด์ฃผ๊ณ , ์ ‘๊ทผ ๊ถŒํ•œ์— ๋Œ€ํ•œ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•œ ํ›„, ์ด๋ฅผ ์ด์šฉํ•ด ๋‚ด ์„œ๋ฒ„์—์„œ ์ธ์ฆ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. 

OAuth๋Š” ์ธ์ฆ(Authentication)์„ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋งก๊ธธ ๋ฟ, ์ ‘๊ทผ ๊ถŒํ•œ ๊ด€๋ฆฌ(Authorization)์€ ํ•ด๋‹น ์„œ๋น„์Šค ํšŒ์‚ฌ์˜ ๋ชซ์ด๋ฏ€๋กœ, ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ํ•ด๋‹น ์„œ๋น„์Šค ํšŒ์‚ฌ ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์€ ๋ณ€ํ•จ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

OAuth ๊ธฐ์ดˆ ์šฉ์–ด

  • Resource Owner: ์•ก์„ธ์Šค ์ค‘์ธ ๋ฆฌ์†Œ์Šค์˜ ์œ ์ €์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ A์˜ ๊ตฌ๊ธ€ ๊ณ„์ •์„ ์ด์šฉํ•ด์„œ App์— ๋กœ๊ทธ์ธํ•  ๊ฒฝ์šฐ, Resource owner๋Š” A์ž…๋‹ˆ๋‹ค.
  • Client: Resource owner๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์•ž์—์„œ ๋งํ•œ ์˜ˆ์‹œ์—์„œ๋Š” App์ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
  • Resource Server: Client์˜ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
  • Authorization Server: Client ๋ฐ Resource Owner๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ธ์ฆํ•œ ํ›„, Resource Server์—๊ฒŒ Access Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
  • Authorization Grant: Client๊ฐ€ Access Token์„ ์–ป์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž๊ฒฉ ์ฆ๋ช…์˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
  • Authorization Code: Access Token์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์ „์— ํ•„์š”ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. Client ID๋กœ ์ฝ”๋“œ๋ฅผ ๋ฐ›๊ณ , Client Secret๊ณผ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด Access Token์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
  • Access Token: ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” Credentials ์ž…๋‹ˆ๋‹ค. Authorization Code์™€ Client Secret์„ ์ด์šฉํ•ด ๋ฐ›์•„์˜ค๋Š” Access Token์œผ๋กœ Resource Server์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Scope: ํ† ํฐ์˜ ๊ถŒํ•œ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ Access Token์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์˜ ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค.

 

OAuth 2.0 ์ธ์ฆ ๋ฐฉ์‹