# OAuth 2
API๋ฅผ ํตํด ํน์ ์์คํ ์ ๋ณดํธ๋ ์์์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ํด๋น ์์คํ ์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด(์์ด๋, ํจ์ค์๋)๋ฅผ ์๊ณ ์์ด์ผ ํฉ๋๋ค. ์์คํ ์ฐจ์์์ ๋ค๋ฅธ ์์คํ ์ ๋ณดํธ๋ ์์์ ์ ๊ทผํ๊ธฐ ์ํด ๊ทธ ์์คํ ์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์์ ๋ง์ ๋ฌธ์ ๋ค์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ด๋ฐ ๋ฌธ์ ๋ค์ด ๋ฐ์ํ์ง ์๋๋ก API ์ ๊ทผ์ ์์ํ์ฌ ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ ์๋น์ค ์ ๊ณต์(Google, Yahoo, AOL ๋ฑ)๋ค์ด ์ด๋ฐ ์ธ์ฆ ๋ฐฉ์์ ๋ณ๋๋ก ๊ตฌํํ์ฌ ์ฌ์ฉํ์์ต๋๋ค. ์ด๋ ๊ฒ ๊ตฌํ๋ ๊ฒฐ๊ณผ๋ค์ ์๋ก ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ณ ์๋ก ํธํ๋์ง ์์๋๋ฐ ์ด๋ฅผ ํต์ผํ๊ธฐ ์ํด OAuth 1.0 ํ์ค์์ ๋ง๋ค์์ต๋๋ค.
OAuth 1.0 ๋ฐํ ์ดํ ๋ช ๋ ๋์ ์ฌ์ฉํ๋ฉด์ ์ปค๋ฎค๋ํฐ๋ ์๋์ ๊ฐ์ ๋จ์ ๋ค์ ๋ํด ๊ณ ๋ฏผํ์๊ณ ๊ทธ ๊ฒฐ๊ณผ OAuth 2(์ดํ โOAuthโ๋ก ๋ช ๋ช )๋ฅผ ํ์ค์ผ๋ก ์ ๋ฆฌํ์์ต๋๋ค.
# OAuth 1.0์ ํน์ง
๊ธฐ์กด์ ๋ค๋ฅธ ์ธ์ฆ๋ฐฉ์(OpenID)๊ณผ ๊ตฌ๋ถ๋๋ ํน์ง์ ํฌ๊ฒ ๋ ๊ฐ์ง์ ๋๋ค.
- API ์ธ์ฆ ์, ์จ๋ํํฐ ์ดํ๋ฆฌ์ผ์ด์ ์๊ฒ ์ฌ์ฉ์์ ๋น๋ฒ์ ๋ ธ์ถํ์ง ์๊ณ ์ธ์ฆํ ์ ์๋ค๋ ์
- ์ธ์ฆ(Authentication)๊ณผ API ๊ถํ(Authorization) ๋ถ์ฌ๋ฅผ ๋์์ ํ ์ ์๋ค๋ ์
# OAuth 1.0 ๋์์๋ฆฌ
# OAuth 2.0
# ๊ฐ์ ๋ ๋ถ๋ถ
์ฉ์ด๋ณ๊ฒฝ :
- Resource Owner : ์ฌ์ฉ์
- Resource Server : API ์๋ฒ
- Authorization Server : ์ธ์ฆ์๋ฒ (API ์๋ฒ์ ๊ฐ์ ์๋ ์์)
- Client : ์จ๋ํํฐ ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋จํ๋ค :
OAuth 1.0์์๋ https ๊ฐ ํ์๊ฐ ์๋์๊ธฐ ๋๋ฌธ์ API๋ฅผ ํธ์ถํ ๋ signature๋ฅผ ์์ฑํด์ ํธ์ถํด์ผ ํ์ต๋๋ค. ๋๋ฌธ์ OAuth 1.0 API๋ฅผ ํ ์คํธ ํ๋ ค๋ฉด curl๋ฑ์ ์ฌ์ฉํ๊ธฐ ํ๋ค๊ณ ๋ณ๋์ API ์ฝ์๋ฑ์ ์ฌ์ฉํด์ ํ ์คํธ ํด์ผ ํ์ต๋๋ค.
OAuth 2.0์ Bearer ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ์ฐ๋ฉด ๋ ์ด์ signature ๊ฐ ํ์ ์๊ธฐ ๋๋ฌธ์ API๋ฅผ ํ ์คํธํ๊ฑฐ๋ ์์ ๋ฅผ ๋ง๋ค ๋ ๊ฐ๋จํ๊ฒ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ต๋๋ค.
๋ํ ์๋น์ค๋ก์ ํ์ฅ์ฑ ์ง์ :
- ์ปค๋ค๋ ์๋น์ค๋ ์ธ์ฆ ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ๊ฑฐ๋ ๋ค์คํ ํ ์ ์์ด์ผ ํฉ๋๋ค.
- Authorization Server์ ์ญํ ์ ๋ช ํํ ํ์ฌ ์ด์ ๋ํ ๊ณ ๋ ค๊ฐ ๋์์ต๋๋ค.
๋ ๋ง์ ์ธ์ฆ ๋ฐฉ๋ฒ ์ง์ :
- ์ด์ ์๋ 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/
โ ๐ TIL (Today I learned) PRPL โ