# OAuth 2

API๋ฅผ ํ†ตํ•ด ํŠน์ • ์‹œ์Šคํ…œ์˜ ๋ณดํ˜ธ๋œ ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ์‹œ์Šคํ…œ์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(์•„์ด๋””, ํŒจ์Šค์›Œ๋“œ)๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์ฐจ์›์—์„œ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์˜ ๋ณดํ˜ธ๋œ ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ ์‹œ์Šคํ…œ์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ด ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ณด์•ˆ์ƒ ๋งŽ์€ ๋ฌธ์ œ๋“ค์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก API ์ ‘๊ทผ์„ ์œ„์ž„ํ•˜์—ฌ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์„œ๋น„์Šค ์ œ๊ณต์ž(Google, Yahoo, AOL ๋“ฑ)๋“ค์ด ์ด๋Ÿฐ ์ธ์ฆ ๋ฐฉ์‹์„ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋œ ๊ฒฐ๊ณผ๋“ค์€ ์„œ๋กœ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ณ  ์„œ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š์•˜๋Š”๋ฐ ์ด๋ฅผ ํ†ต์ผํ•˜๊ธฐ ์œ„ํ•ด OAuth 1.0 ํ‘œ์ค€์•ˆ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

OAuth 1.0 ๋ฐœํ‘œ ์ดํ›„ ๋ช‡ ๋…„ ๋™์•ˆ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹จ์ ๋“ค์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜์˜€๊ณ  ๊ทธ ๊ฒฐ๊ณผ OAuth 2(์ดํ›„ โ€˜OAuthโ€™๋กœ ๋ช…๋ช…)๋ฅผ ํ‘œ์ค€์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

# OAuth 1.0์˜ ํŠน์ง•

๊ธฐ์กด์˜ ๋‹ค๋ฅธ ์ธ์ฆ๋ฐฉ์‹(OpenID)๊ณผ ๊ตฌ๋ถ„๋˜๋Š” ํŠน์ง•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  1. API ์ธ์ฆ ์‹œ, ์จ๋“œํŒŒํ‹ฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—๊ฒŒ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฒˆ์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ธ์ฆํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ 
  2. ์ธ์ฆ(Authentication)๊ณผ API ๊ถŒํ•œ(Authorization) ๋ถ€์—ฌ๋ฅผ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ 

# OAuth 1.0 ๋™์ž‘์›๋ฆฌ

# OAuth 2.0

# ๊ฐœ์„ ๋œ ๋ถ€๋ถ„

  1. ์šฉ์–ด๋ณ€๊ฒฝ :

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

    OAuth 1.0์—์„œ๋Š” https ๊ฐ€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ signature๋ฅผ ์ƒ์„ฑํ•ด์„œ ํ˜ธ์ถœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— OAuth 1.0 API๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๋ ค๋ฉด curl๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ํž˜๋“ค๊ณ  ๋ณ„๋„์˜ API ์ฝ˜์†”๋“ฑ์„ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

    OAuth 2.0์˜ Bearer ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์„ ์“ฐ๋ฉด ๋” ์ด์ƒ signature ๊ฐ€ ํ•„์š” ์—†๊ธฐ ๋•Œ๋ฌธ์— API๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  3. ๋Œ€ํ˜• ์„œ๋น„์Šค๋กœ์˜ ํ™•์žฅ์„ฑ ์ง€์› :

    • ์ปค๋‹ค๋ž€ ์„œ๋น„์Šค๋Š” ์ธ์ฆ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋‹ค์ค‘ํ™” ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • Authorization Server์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ํ•˜์—ฌ ์ด์— ๋Œ€ํ•œ ๊ณ ๋ ค๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  4. ๋” ๋งŽ์€ ์ธ์ฆ ๋ฐฉ๋ฒ• ์ง€์› :

    • ์ด์ „์—๋Š” HMAC์„ ์ด์šฉํ•œ ์•”ํ˜ธํ™” ์ธ์ฆ๋งŒ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • OAuth 2.0์€ ์—ฌ๋Ÿฌ ์ธ์ฆ ๋ฐฉ์‹์„ ํ†ตํ•ด ์›น & ๋ชจ๋ฐ”์ผ ๋“ฑ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€์‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • Access Token์˜ Life-time์„ ์ง€์ •ํ•˜์—ฌ ๋งŒ๋ฃŒ์ผ ์„ค์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

# OAuth 2.0 ๋™์ž‘์›๋ฆฌ

# ์ฐธ์กฐ

  • http://d2.naver.com/helloworld/24942
  • http://earlybird.kr/1584
  • http://bcho.tistory.com/942
  • https://stackoverflow.com/questions/4113934/how-is-oauth-2-different-from-oauth-1
  • http://www.nextree.co.kr/oauth-2reul-iyonghan-sso-hwangyeong-gucug-1-2/