OAuth

OAuth๋ฅผ ์•Œ์•„๋ณด์ž

๐Ÿง OAuth(OAuth1.0a)๋ž€ ?

OAuth๋ž€ ์‚ฌ์šฉ์ž์˜ ๊ณ„์ •์ •๋ณด ๋…ธ์ถœ ์—†์ด ๊ถŒํ•œ(Authorization)์„ ์ธ์ฆ(Authentication)ํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด ์™ธ๋ถ€ ์„œ๋น„์Šค์—์„œ๋„ ์ธ์ฆ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ๊ทธ ์„œ๋น„์Šค์˜ API๋ฅผ ์ด์šฉํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ, ์ด๊ฒƒ์„ ๋ฐ”๋กœ OAuth๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ‘ถ ํƒ„์ƒ๋ฐฐ๊ฒฝ

OAuth์˜ ์‹œ์ž‘์€ ํŠธ์œ„ํ„ฐ์˜ ๊ฐœ๋ฐœ์ž์™€ ์†Œ์…œ ๋ถ๋งˆํฌ ์„œ๋น„์Šค์ธ Gnolia์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธ์ฆ ๋ฐฉ์‹์„ ๋…ผ์˜ํ•œ ๋•Œ๋ถ€ํ„ฐ ์˜€๊ณ  2007๋…„ 4์›” ์ธํ„ฐ๋„ท์— OAuth ๋…ผ์˜์ฒด๋ฅผ ๋งŒ๋“  ๋’ค OAuth๋“œ๋ž˜ํ”„ํŠธ ์ œ์•ˆ์„œ๋ฅผ ๋งŒ๋“ค์–ด ๊ณต์œ ํ–ˆ๊ณ , 2010๋…„ IETF OAuth ์›Œํ‚น๊ทธ๋ฃน์— ์˜ํ•ด ์ด ํ”„๋กœํ† ์ฝœ์ด IETF ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐœํ‘œ๋˜์—ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ 

  • ์‹ ๋ขฐ : ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ID/PW๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๊บผ๋ คํ•จ
  • ํ”ผ์‹ฑ : ๊ฐ์ข… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์— ID/PW๋ฅผ ๊ณ„์† ์ œ๊ณตํ•  ๊ฒฝ์šฐ ํ”ผ์‹ฑ์— ๋‘”๊ฐํ•ด์งˆ์ˆ˜ ์žˆ๋‹ค.
  • ์ ‘๊ทผ๋ฒ”์œ„๊ฐ€ ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ฅธ ์œ„ํ—˜ ๋ถ€๋‹ด: ID/PW๋ฅผ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์ง
  • ์‹ ๋ขฐ์„ฑ์˜ ์ œํ•œ: PW ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋™์ž‘์„ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋จ
  • ํ๊ธฐ๋ฌธ์ œ: ๊ถŒํ•œ์„ ํ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด PW๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ

โš™๏ธ ๋™์ž‘๋ฐฉ์‹

OAuth์˜ ์šฉ์–ด์ •๋ฆฌ

์šฉ์–ด์„ค๋ช…
UserService Provider์— ๊ณ„์ •์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ, Consumer์•ฑ์„ ์ด์šฉํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž
Service ProviderOAuth๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Open API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค (facebook,google๋“ฑ)
Protected ResourceService Provider๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋˜์–ด์ง€๋Š” API ์ž์›๋“ค
ConsumerOAuth ์ธ์ฆ์„ ์‚ฌ์šฉํ•ด Service Provider์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์›น ์„œ๋น„์Šค
Consumer KeyConsumer๊ฐ€ Service Provider์—๊ฒŒ ์ž์‹ ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š”ํ‚ค
Consumer SecretConsumer Key์˜ ์†Œ์œ ๊ถŒ์„ ํ™•๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด Consumer๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Secret
Request TokenConsumer๊ฐ€ Service Provider์—๊ฒŒ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ธ์ฆ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’. ์ธ์ฆ์ด ์™„๋ฃŒ๋œ ํ›„์—๋Š” Access Token์œผ๋กœ ๊ตํ™˜ํ•œ๋‹ค.
Access Token์ธ์ฆ ํ›„ Consumer๊ฐ€ Service Provider์˜ ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค๋ฅผ ํฌํ•จํ•œ ๊ฐ’
Token Secret์ฃผ์–ด์ง„ ํ† ํฐ์˜ ์†Œ์œ ๊ถŒ์„ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•ด ์†Œ๋น„์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Secret

OAuth์˜ WorkFlow

OAuth WORKFLOW

  1. Request Token์˜ ์š”์ฒญ๊ณผ ๋ฐœ๊ธ‰
  2. ์‚ฌ์šฉ์ž ์ธ์ฆ ํŽ˜์ด์ง€ ํ˜ธ์ถœ
  3. ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์™„๋ฃŒ
  4. ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ ์š”์ฒญ ๋ฐ ์ˆ˜๋ฝ
  5. Access Token ๋ฐœ๊ธ‰
  6. Access Token์„ ์ด์šฉํ•ด ์„œ๋น„์Šค ์ •๋ณด ์š”์ฒญ

๐Ÿง OAuth2.0

OAuth 1.0์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๊ณค๋ž€ํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋˜ํ•œ ์ ˆ์ฐจ๊ฐ€ ๋ณต์žกํ•˜์—ฌ OAuth ๊ตฌํ˜„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์ž‘ํ•˜๊ธฐ ์–ด๋ ต๊ณ , ์ด๋Ÿฐ์ €๋Ÿฐ ๋ณต์žกํ•œ ์ ˆ์ฐจ ๋•Œ๋ฌธ์— Service Provider์—๊ฒŒ๋„ ์—ฐ์‚ฐ ๋ถ€๋‹ด์ด ๋ฐœ์ƒํ•œ๋‹ค. OAuth 2.0์€ ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๊ฐœ์„ ํ•œ ๊ฒƒ์ด๋‹ค. OAuth 1.0๊ณผ ํ˜ธํ™˜์„ฑ์ด ์—†๊ณ , ์—ฌ๋Ÿฌ ์ธํ„ฐ๋„ท ์„œ๋น„์Šค ๊ธฐ์—…์—์„œ OAuth 2.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

ํŠน์ง•

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง€์› ๊ฐ•ํ™”
  • ์•”ํ˜ธํ™”๊ฐ€ ํ•„์š” ์—†์Œ HTTPS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  HMAC์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
  • Siganature ๋‹จ์ˆœํ™” ์ •๋ ฌ๊ณผ URL ์ธ์ฝ”๋”ฉ์ด ํ•„์š” ์—†์Œ
  • Access Token ๊ฐฑ์‹  OAuth 1.0์—์„œ Access Token์„ ๋ฐ›์œผ๋ฉด Access Token์„ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํŠธ์œ„ํ„ฐ์˜ ๊ฒฝ์šฐ์—๋Š” Access Token์„ ๋งŒ๋ฃŒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. OAuth 2.0์—์„œ๋Š” ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด Access Token์˜ Life-time์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

โš”๏ธ OAuth1.0 ๊ณผ OAuth2.0 ์ฐจ์ด์ 

์•„๋ž˜๋Š” OAuth 1.0 ์—์„œ OAuth2.0 ์ฐจ์ด์ ์€ ์ผ๋‹จ ์ธ์ฆ ์ ˆ์ฐจ ๊ฐ„์†Œํ™” ๋จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ตฌํ˜„ํ•˜๊ธฐ ๋”์‰ฌ์›Œ์กŒ๊ณ , ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ ์šฉ์–ด๋„ ๋ฐ”๋€Œ๋ฉด์„œ Authorizaiton server์™€ Resource์„œ๋ฒ„์˜ ๋ถ„๋ฆฌ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋˜์—ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์–‘ํ•œ ์ธ์ฆ ๋ฐฉ์‹์„ ์ง€์›ํ•˜๊ฒŒ ๋๋‹ค.

์šฉ์–ด ๋ณ€๊ฒฝ

  • Resource Owner : ์‚ฌ์šฉ์ž (1.0 Userํ•ด๋‹น)
  • Resource Server : REST API ์„œ๋ฒ„ (1.0 Protected Resource)
  • Authorization Server : ์ธ์ฆ์„œ๋ฒ„ (API ์„œ๋ฒ„์™€ ๊ฐ™์„ ์ˆ˜๋„ ์žˆ์Œ)(1.0 Service Provider)
  • Client : ์จ๋“œํŒŒํ‹ฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ (1.0 Service Provider ํ•ด๋‹น)

Resource Server์™€ Authorization Server์„œ๋ฒ„์˜ ๋ถ„๋ฆฌ

  • ์ปค๋‹ค๋ž€ ์„œ๋น„์Šค๋Š” ์ธ์ฆ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋‹ค์ค‘ํ™” ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  • Authorization Server์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ํ•จ

๋‹ค์–‘ํ•œ ์ธ์ฆ ๋ฐฉ์‹(Grant_type)

  • Authorization Code Grant
    • ์„œ๋ฒ„์‚ฌ์ด๋“œ ์ฝ”๋“œ๋กœ ์ธ์ฆํ•˜๋Š” ๋ฐฉ์‹
    • ๊ถŒํ•œ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์™€ ๋ฆฌ์†Œ์Šค์„œ๋ฒ„๊ฐ„์˜ ์ค‘์žฌ์—ญํ• .
    • Access Token์„ ๋ฐ”๋กœ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š์•„ ์ž ์žฌ์  ์œ ์ถœ์„ ๋ฐฉ์ง€.
    • ๋กœ๊ทธ์ธ์‹œ์— ํŽ˜์ด์ง€ URL์— response_type=code ๋ผ๊ณ  ๋„˜๊ธด๋‹ค.
  • Implicit Grant
    • token๊ณผ scope์— ๋Œ€ํ•œ ์ŠคํŽ™ ๋“ฑ์€ ๋‹ค๋ฅด์ง€๋งŒ OAuth 1.0a๊ณผ ๊ฐ€์žฅ ๋น„์Šทํ•œ ์ธ์ฆ๋ฐฉ์‹
    • Public Client์ธ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(Javascript application)์ด๋‚˜ ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
    • OAuth 2.0์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ๊ถŒํ•œ์ฝ”๋“œ ์—†์ด ๋ฐ”๋กœ ๋ฐœ๊ธ‰๋˜์„œ ๋ณด์•ˆ์— ์ทจ์•ฝ
    • ์ฃผ๋กœ Read only์ธ ์„œ๋น„์Šค์— ์‚ฌ์šฉ.
    • ๋กœ๊ทธ์ธ์‹œ์— ํŽ˜์ด์ง€ URL์— response_type=token ๋ผ๊ณ  ๋„˜๊ธด๋‹ค.
  • Resource Owner Password Credentials Grant
    • Client์— ์•„์ด๋””/ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ €์žฅํ•ด ๋†“๊ณ  ์•„์ด๋””/ํŒจ์Šค์›Œ๋“œ๋กœ ์ง์ ‘ access token์„ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • Client ๋ฅผ ๋ฏฟ์„ ์ˆ˜ ์—†์„ ๋•Œ์—๋Š” ์‚ฌ์šฉํ•˜๊ธฐ์— ์œ„ํ—˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— API ์„œ๋น„์Šค์˜ ๊ณต์‹ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋ฏฟ์„ ์ˆ˜ ์žˆ๋Š” Client์— ํ•œํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.
    • ๋กœ๊ทธ์ธ์‹œ์— API์— POST๋กœ grant_type=password ๋ผ๊ณ  ๋„˜๊ธด๋‹ค.
  • Client Credentials Grant
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Confidential Client์ผ ๋•Œ id์™€ secret์„ ๊ฐ€์ง€๊ณ  ์ธ์ฆํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ๋กœ๊ทธ์ธ์‹œ์— API์— POST๋กœ grant_type=client_credentials ๋ผ๊ณ  ๋„˜๊ธด๋‹ค.
  • Device Code Grant
    • ์žฅ์น˜ ์ฝ”๋“œ ๋ถ€์—ฌ ์œ ํ˜•์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ž…๋ ฅ์ด ์ œํ•œ๋œ ์žฅ์น˜์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • Refresh Token Grant
    • ๊ธฐ์กด์— ์ €์žฅํ•ด๋‘” ๋ฆฌํ”„๋Ÿฌ์‹œ ํ† ํฐ์ด ์กด์žฌํ•  ๋•Œ ์—‘์„ธ์Šคํ† ํฐ ์žฌ๋ฐœ๊ธ‰ ๋ฐ›์„ ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด ์•ก์„ธ์Šค๋Š” ํ† ํฐ์ด ๋งŒ๋ฃŒ๋œ๋‹ค.

Thanks to

์ฐธ๊ณ  : Naver D2 - OAuth์™€ ์ถค์„

์ฐธ๊ณ  : Showerbugs - OAuth ๋ž€ ๋ฌด์—‡์ผ๊นŒ

์ฐธ๊ณ  : Wan Blog - OAuth๋ž€?


ยฉ 2019. All rights reserved.