OAuth๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํน์ ์์คํ ์ ๋ณดํธ๋ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ธฐ ์ํด, ์ฌ์ฉ์ ์ธ์ฆ(Authentication)์ ํตํด ์ฌ์ฉ์์ ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ(Authorization)์ ์์๋ฐ์ ์ ์๋ ํ์ค ํ๋กํ ์ฝ์ด๋ค.
๊ฐ๋จํ ๋งํด, OAuth๋ ์ธ์ฆ ํ์ค์ด๋ค. OAuth๋ ์ธ์ฆ์ ์ํ ์คํ ์คํ ๋๋ ํ๋กํ ์ฝ๋ก, ์ฌ์ฉ์๊ฐ Facebook์ด๋ ํธ์ํฐ ๊ฐ์ ์ธํฐ๋ท ์๋น์ค์ ๊ธฐ๋ฅ์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ํ ๊ฒ์ด๋ค.
๐ ๊ฐ๋ฐ์ ์ ์ฅ์์ ๋ณด์๋ฉด, ์ฐ๋ฆฌ์ ์๋น์ค๊ฐ ์ฐ๋ฆฌ ์๋น์ค๋ฅผ ์ด์ฉํ๋ ์ ์ ์ ํ์ฌ ํ๋ซํผ ์ ๋ณด์ ์ ๊ทผํ๊ธฐ ์ํด์ ๊ถํ์ ํ์ฌ ํ๋ซํผ์ผ๋ก๋ถํฐ ์์๋ฐ๋ ๊ฒ์ด๋ค.
OAuth์ Auth๋ Authentication(์ธ์ฆ) ๋ฟ๋ง ์๋๋ผ Authorization(ํ๊ฐ)์ ์๋ฏธ๋ ํฌํจํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ OAuth ์ธ์ฆ์ ์งํํ ๋ ํด๋น ์๋น์ค ์ ๊ณต์๋ '์ 3์๊ฐ ๋ฆฌ์์ค[์ด๋ค ์ ๋ณด๋ ์๋น์ค]์ ์ฌ์ฉ์์ ๊ถํ์ผ๋ก ์ ๊ทผํ๋ ค ํ๋๋ฐ ํ์ฉํ๊ฒ ๋๋'๋ผ๋ ์๋ด ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ค.
์ธ์ฆ๊ณผ ์ธ๊ฐ
- Authentication(์ธ์ฆ) : ํด๋น ์ฌ์ฉ์๊ฐ ์์ ์ด ์ฃผ์ฅํ๋ ์ฌ๋์ธ์ง ํ์ธํ๋ ๊ฒ์ผ๋ก, ์๋ณ(identify)๊ณผ ์ฐ๊ด๋ ๊ฐ๋ ์ด๋ค.
- Authorization(ํ๊ฐ) : ํด๋น ์ฌ์ฉ์์๊ฒ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ผ๋ก, ์ ๊ทผ(access)๊ณผ ์ฐ๊ด๋ ๊ฐ๋ ์ด๋ค.
OAuth๊ฐ ์ฌ์ฉ๋๊ธฐ ์ ์๋ ์ธ์ฆ ๋ฐฉ์์ ํ์ค์ด ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๊ธฐ๋ณธ ์ธ์ฆ์ธ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ ๋ณด์์ ์ทจ์ฝํ ๊ตฌ์กฐ์ด๋ค.
๊ธฐ๋ณธ ์ธ์ฆ์ด ์๋์ด๋, ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์ ์์ด๋์ ์ํธ๊ฐ ๋ ธ์ถ๋์ง ์๋๋ก ํ๋ฉด์ API ์ ๊ทผ ์์(API Access Delegation)์ด ๊ฐ๋ฅํ ์ฌ๋ฌ ์ธ์ฆ ๋ฐฉ๋ฒ์ด ์์๋ค. Google๊ณผ Yahoo!, Amazon ๋ฑ์์ ๊ฐ๊ฐ์ ์ธ์ฆ ๋ฐฉ์์ ์ ์ํด์ ์ฌ์ฉํ๋๋ฐ, ์๋ฅผ ๋ค๋ฉด Google์ AuthSub, Yahoo!์ BBAuth์ด ์๋ค.
ํ์ง๋ง ์ด ๋ฐฉ์์ ํ์คํ๊ฐ ๋์ด์์ง ์๊ธฐ ๋๋ฌธ์ ๊ตฌ๊ธ๊ณผ ์ฐ๋ํ๋ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ AuthSub, ์ผํ์ ์ฐ๋ํ๊ธฐ ์ํด์๋ BBAuth์ ๋ง์ถฐ ๊ฐ๋ณ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ์ ์ง๋ณด์ํด์ผ ํ๋ค.
์ด๋ ๊ฒ ์ ๊ฐ๊ฐ์ด์๋ ์ธ์ฆ ๋ฐฉ์์ ํ์คํํ ์ธ์ฆ ๋ฐฉ์์ด ๋ฐ๋ก OAuth์ด๋ค.
๊ทธ ์์์ 2006๋
์ ํธ์ํฐ์ ๊ฐ๋ฐ์์ Ma.gnolia์ ๊ฐ๋ฐ์๊ฐ ๋ง๋ ์ธ์ฆ ๋ฐฉ์์ ๋
ผ์ํ ๋๋ถํฐ์๋ค. ๋ ํ์ฌ์ ๊ฐ๋ฐ์๋ค์ API ์ ๊ทผ ์์์ ๋ํ ํ์ค์์ด ์๋ค๋ ๊ฒ์ ์์๋ค. ๊ทธ๋์ 2007๋
4์ ์ธํฐ๋ท์ OAuth ๋
ผ์์ฒด๋ฅผ ๋ง๋ ๋ค OAuth ๋๋ํํธ ์ ์์๋ฅผ ๋ง๋ค์ด ๊ณต์ ํด ์ฌ๋๋ค์ ์ง์ง๋ฅผ ๋ฐ์๊ณ , ์ต์ข
์ ์ผ๋ก 2010๋
์ OAuth 1.0 ํ๋กํ ์ฝ ํ์ค์์ด RFC5849๋ก ๋ฐํ๋์๋ค.
( RFC: Request for comments๋ ๋ฏธ๊ตญ์ ๊ตญ์ ์ธํฐ๋ท ํ์คํ ๊ธฐ๊ตฌ IETF์์ ์ ๊ณต ๋ฐ ๊ด๋ฆฌํ๋ ๋ฌธ์๋ก, ์ธํฐ๋ท ๊ฐ๋ฐ์ ์์ด์ ํ์ํ ๊ธฐ์ , ์ฐ๊ตฌ ๊ฒฐ๊ณผ, ์ ์ฐจ ๋ฑ์ ๊ธฐ์ ํด ๋์ ๋ฌธ์์ด๋ค )
๊ทธ๋ฌ๋ OAuth 1.0์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉํ๊ธฐ ๊ณค๋ํ๋ค๋ ๋จ์ ์ด ์๋ค. ๋ํ ์ ์ฐจ๊ฐ ๋ณต์กํด OAuth ๊ตฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ํ๊ธฐ ์ด๋ ต๊ณ , ์ด๋ฐ์ ๋ฐ ๋ณต์กํ ์ ์ฐจ ๋๋ฌธ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ ์๋ฒ์๊ฒ๋ ์ฐ์ฐ ๋ถ๋ด์ด ๋ฐ์ํ๋ค. ์ด๋ฌํ ๋จ์ ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก OAuth 2.0 (RFC6749) ์ด๋ค. OAuth 2.0์ ๊ฐ์ฅ ํฐ ํน์ง์ธ "์ธ์ฆ ์ ์ฐจ๊ฐ ๊ฐ๋ตํ๋ค"๋ผ๋ ์ฌ์ค๋ ์ด์์ ํ์๋๋ค.
๐ก์ด ๋ฐ์๋ OAuth 1.0๊ณผ OAuth 2.0์ ๋ค๋ฅธ ์ ์ด ๋ง๋ค. ๋ถ์ ์ด๋ฆ์ ๋ณด๋ฉด ๋น์ทํด ๋ณด์ด์ง๋ง ์ ํ ๋ค๋ฅธ(์ฌ์ง์ด ํธํ๋์ง๋ ์๋) ๋ณด์ ํ๋กํ ์ฝ๋ก ๋ด๋ ๋ฌด๋ฐฉํ๋ค๋ ์ ์ด ๋ ํนํ๋ค. OAuth 1.0์ ์ฉ์ด์ ๊ฐ๋ตํ ์ธ์ฆ ๊ณผ์ , ๊ทธ๋ฆฌ๊ณ OAuth 2.0๊ณผ์ ์ฐจ์ด์ ์ ์์๋ณธ ๋ค OAuth 2.0์ ๊ดํด ์์ธํ ์์๋ณด์!
OAuth๋ฅผ ์ด์ฉํด ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๋ ๊ณผ์ ์ OAuth Dance๋ผ๊ณ ํ๋ค. ๋ ๋ช ์ด ์ถค์ ์ถ๋ฏ ์ ํํ๊ฒ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์ ์ฌ๋ฐ๊ฒ ๋ช ๋ช ํ ๊ฒ์ด๋ค. OAuth๋ฅผ ์ดํดํ๋ ค๋ฉด ๋ช ๊ฐ์ง ์ฉ์ด๋ฅผ ๋จผ์ ์์๋์ด์ผ ํ๋ค.
user
: service provider์ ๊ณ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด์, consumer๋ฅผ ์ด์ฉํ๋ ค๋ ๊ฐ์ธ ์ฌ์ฉ์
consumer
: OAuth๋ฅผ ์ฌ์ฉํ์ฌ service provider์๊ฒ ์ ๊ทผํด์ ๊ทธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ ์น์ฌ์ดํธ ๋๋ ์ ํ๋ฆฌ์ผ์ด์
service provider
: OAuth๋ฅผ ํตํด ์ ๊ทผ์ ์ง์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
(OAuth๋ฅผ ์ฌ์ฉํ๋ Open API๋ฅผ ์ ๊ณตํ๋ ์๋น์ค)
consumer secret
: service provider์์ consumer๊ฐ ์์ ์์ ์ธ์ฆํ๊ธฐ ์ํ ํค
request token(์์ฒญ ํ ํฐ)
: consumer๊ฐ service provider์๊ฒ ์ ๊ทผ ๊ถํ์ ์ธ์ฆ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ด๋ฉฐ, ์ธ์ฆ ํ access token์ผ๋ก ๋ณํ
access token(์ ๊ทผ ํ ํฐ)
์ ๊ทผํ๊ธฐ ์ํ ํค๋ฅผ ํฌํจํ ๊ฐ
์ด ๊ณผ์ ์ ๋ฐ๋ฅด๋ฉด Access Token์ ๊ฐ์ง๊ฒ ๋ Consumer๋ ์ฌ์ ์ ํธ์ถ์ด ํ๋ฝ๋ Service Provider์ ์คํ API๋ฅผ ํธ์ถํ ์ ์๋ค. (Access Token์ ์๋์ OAuth 2.0๊ณผ ํจ๊ป ์์๋ณด์.)
๊ทธ๋ฌ๋ ์์ ์ธ๊ธํ ๋ฏ, OAuth 1.0์ ์ธ์ฆ ์ ์ฐจ๊ฐ ๋ณต์กํ ๋ฑ ๋จ์ ์ด ๋ง์ ํ์ฌ๋ OAuth 2.0์ ์๋ ๊ฒ์ด ๋์ฑ ์ค์ํ๋ค. OAuth 2.0์์ ์ฌ์ฉํ๋ ์ฉ์ด ์ฒด๊ณ๋ OAuth 1.0๊ณผ ์ฐจ์ด๊ฐ ์๋ค. ๋ ๋ค API ๋ณด์์ ์ํ ํ๋กํ ์ฝ์ด์ง๋ง, ๋ชฉ์ ๋ง ๊ฐ์ ๋ฟ ๋ค๋ฅธ ํ๋กํ ์ฝ์ด๋ผ๊ณ ์ดํดํ๋ ๊ฒ์ด ์ข๋ค(์ค์ ๋ก ํธํ์ด ๋์ง ์๋๋ค).
OAuth 2.0์ ๊ดํด ํํค์ณ ๋ณด๊ธฐ ์ , OAuth 1.0๊ณผ OAuth 2.0์ ์ฐจ์ด๋ฅผ ์ ๋ฆฌํด ๋ณด์.
ํ ํฐ ๊ด๋ฆฌ(๋ฐ๊ธ๊ณผ ๊ฐฑ์ )
: OAuth 1.0์์๋ ํ ํฐ์ ๋ฐ๊ธ๋ฐ๊ณ ๊ฐฑ์ ํ๋ ๊ณผ์ ์ด ๋ณต์กํ๊ณ ์ด๋ ค์ ์ผ๋, OAuth 2.0์์๋ ์๋ก์ด ํ ํฐ์ ์ฝ๊ฒ ๋ฐ๊ธ๋ฐ๊ณ ๊ฐฑ์ ํ ์ ์๋ค.
์ธ์ฆ ์ ์ฐจ ๊ฐ์ํ
: OAuth 1.0์์๋ ๋์งํธ ์๋ช
์ ํตํด ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๋ ๋ฐ๋ฉด, OAuth 2.0์ ๋ณด์ ํ ํฐ์ ์ฌ์ฉํด ์ํธํ๋ https์ ๋งก๊ธด๋ค. ๋ฐ๋ผ์ ๋ณต์กํ ๋์งํธ ์๋ช
์ ๊ดํ ๋ก์ง์ ์๊ตฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ตฌํ ์์ฒด๊ฐ ๊ฐ๋ฐ์ ์
์ฅ์์ ์ฌ์์ง๋ค.
๋ฒ์ฉ์ฑ
: OAuth 2.0 ์ ๋ณด๋ค ๋ฒ์ฉ์ ์ธ ํ๋กํ ์ฝ๋ก, ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๊ฐ์ ๋ค์ํ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์์ง๋ง, OAuth 1.0์ ๋ ์ ์ฐํ์ฌ ์น ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์์๋ง ์ฌ์ฉ๋๋ค.
์ฉ์ด ๋ณ๊ฒฝ, Resource/Authorization Server ๋ถ๋ฆฌ, ๋ค์ํ ์ธ์ฆ ๋ฐฉ์
: ์ฃผ์ฒด๋ฅผ ์นญํ๋ ์ฉ์ด๊ฐ ๋ณ๊ฒฝ๋์๊ณ , ์๋ฒ๊ฐ ๋ถ๋ฆฌ๋์๊ณ , ์ธ์ฆ ์ข
๋ฅ๊ฐ ๋ค์ํ๋์๋ค. ์ด๋ ์๋์ OAuth 2.0์์ ๊ฐ๊ฐ ์ค๋ช
ํ๊ฒ ๋ค.
์ด๋ฐ์ ์ธ๊ธํ '์ฌ์ฉ์', '์ฐ๋ฆฌ์ ์๋น์ค', 'ํ์ฌ ํ๋ซํผ(๊ตฌ๊ธ, ํ์ด์ค๋ถ, ํธ์ํฐ)' ๋ฑ์ ๋ถ๋ฅด๋ ์ฉ์ด๊ฐ ์กด์ฌํ๋ค. ์ด๋ฅผ ๋จผ์ ์ ๋ฆฌํด ๋ณด์.
Resource Owner (User)
: ๋ฆฌ์์ค ์์ ์. ์ฐ๋ฆฌ์ ์๋น์ค๋ฅผ ์ด์ฉํ๋ฉด์, ๊ตฌ๊ธ, ํ์ด์ค๋ถ ๋ฑ์ ํ๋ซํผ์์ ๋ฆฌ์์ค๋ฅผ ์์ ํ๊ณ ์๋ ์ฌ์ฉ์์ด๋ค. ๋ฆฌ์์ค๋ผ ํ๋ฉด '๊ตฌ๊ธ ์บ๋ฆฐ๋ ์ ๋ณด', 'ํ์ด์ค๋ถ ์น๊ตฌ ๋ชฉ๋ก', '๋ค์ด๋ฒ ๋ธ๋ก๊ทธ ํฌ์คํธ ์์ฑ' ๋ฑ์ด ํด๋น๋ ๊ฒ์ด๋ค.
Authorization & Resource Server (Provider)
: Authorization Server๋ Resource Owner๋ฅผ ์ธ์ฆํ๊ณ , Client์๊ฒ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธํด ์ฃผ๋ ์๋ฒ์ด๋ค. Resource Server๋ ๊ตฌ๊ธ, ํ์ด์ค๋ถ, ํธ์ํฐ์ ๊ฐ์ด ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฒ๋ฅผ ๋งํ๋ค.
Client (Consumer)
: Resource Server์ ์์์ ์ด์ฉํ๊ณ ์ ํ๋ ์๋น์ค. ๋ณดํต ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ๋ ค๋ ์๋น์ค๊ฐ ๋ ๊ฒ์ด๋ค.
(+) Authorization Server์ Resource Server๋ ๊ณต์ ๋ฌธ์์ ๋ณ๊ฐ๋ก ๊ตฌ๋ถ๋์ด ์์ง๋ง, ๋ณ๊ฐ์ ์๋ฒ๋ก ๊ตฌ์ฑํ ์ง, ํ๋์ ์๋ฒ๋ก ๊ตฌ์ฑํ ์ง๋ ๊ฐ๋ฐ์๊ฐ ์ ํํ๊ธฐ ๋๋ฆ์ด๋ผ๊ณ ํ๋ค.
OAuth 2.0 ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ ์ ์ ํ๋์ด์ผ ํ๋ ์์ ์ด ์๋ค. Client๋ฅผ Resource Server์ ์ฌ์ ๋ฑ๋กํ๋ ์์ ์ด๋ค. ์ด๋, Redirect URI๋ฅผ ๋ฑ๋กํด์ผ ํ๋๋ฐ, ์ด๋ ์ฌ์ฉ์๊ฐ OAuth 2.0 ์๋น์ค์์ ์ธ์ฆ์ ๋ง์น๊ณ (์๋ฅผ ๋ค์ด ๊ตฌ๊ธ ๋ก๊ทธ์ธ ํ์ด์ง์์ ๋ก๊ทธ์ธ์ ๋ง์ณค์ ๋) ์ฌ์ฉ์๋ฅผ ๋ฆฌ๋๋ ์ ์ํฌ ์์น์ด๋ค.
OAuth 2.0 ์๋น์ค๋ ์ธ์ฆ์ ์ฑ๊ณตํ ์ฌ์ฉ์๋ฅผ ์ฌ์ ์ ๋ฑ๋ก๋ Redirect URI๋ก๋ง ๋ฆฌ๋๋ ์ ์ํจ๋ค. ์น์ธ๋์ง ์์ URI๋ก ๋ฆฌ๋๋ ์ ๋ ๊ฒฝ์ฐ, ์ถํ ์ค๋ช ํ Authorization Code๋ฅผ ์ค๊ฐ์ ํ์ทจ๋นํ ์ํ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ผ๋ถ OAuth 2.0 ์๋น์ค๋ ์ฌ๋ฌ Redirect URI๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
Redirect URI๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์์ ์ํด https๋ง ํ์ฉ๋๋ค. ๋จ, ๋ฃจํ๋ฐฑ(localhost)์ ์์ธ์ ์ผ๋ก http๊ฐ ํ์ฉ๋๋ค.
๋ฑ๋ก ๊ณผ์ ์ ๋ง์น๋ฉด, Client ID์ Client Secret์ ์ป์ ์ ์๋ค. ๋ฐ๊ธ๋ Client ID์ Client Secret์ ์ก์ธ์ค ํ ํฐ์ ํ๋ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด๋, Client ID๋ ๊ณต๊ฐ๋์ด๋ ์๊ด์์ง๋ง, Client Secret์ ์ ๋ ์ ์ถ๋์ด์๋ ์ ๋๋ค. ์ด๋ ์ฌ๊ฐํ ๋ณด์ ์ฌ๊ณ ๋ก ์ด์ด์ง ์ ์๋ค.
OAuth 2.0์ ๋์ ๊ณผ์ ์ ํต์ฌ์ Access Token ์ ์๋ค. ์ด๋ ์์์ ๋ฌธ์์ด ๊ฐ์ธ๋ฐ, ์ด ๋ฌธ์์ด์ ์ ์ฒด๋ ์ด ํ ํฐ์ ๋ฐ๊ธํด ์ค ์๋น์ค๋ง ์ ์ ์๋ค. Access Token ์ ์ด์ฉํด, ์ด ํ ํฐ ๊ฐ๊ณผ ๊ด๋ จ๋ ๊ณ ๊ฐ์ ์ ๋ณด๋ฅผ ์ฐ๋ฆฌ๋ ํด๋น ์๋น์ค์ ์์ฒญํ ์ ์๋ค. ํด๋น ์๋น์ค๋ ์ด ํ ํฐ์ ๊ฒ์ฆํ๊ณ , ๋ฐ๊ธ๋ ๊ฒ ๋ง์ ๊ฒฝ์ฐ ํด๋น ๊ณ ๊ฐ์ ์ ๋ณด๋ฅผ ๋๊ฒจ์ค๋ค.
์ฆ, Access Token ์ ์กด์ฌ ์์ฒด๊ฐ ๊ณ ๊ฐ์ด ์ ๋ณด๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒ์ ๋์ํจ์ ์งํ๋ผ๊ณ ํ ์ ์๋ค. Client๊ฐ Access Token์ (Resource) Server์๊ฒ ๋๊ฒจ์ฃผ๋ฉด ์๋ฒ๋ ์ ๋ณด๋ฅผ ๋๊ฒจ์ฃผ๋ ์์ฃผ ๊ฐ๋จํ ๋ฐฉ์์ด๋ค.
๋ค์์ ๋์ ๊ณผ์ ์ ์ด ์ค์ํ Access Token์ ์ด๋ป๊ฒ ์ป๊ณ ์ฌ์ฉํ๋๊ฐ, ์ ๋๋ก ์ดํดํ ์ ์๊ฒ ๋ค. ํ๋ํ๋ ์ดํด๋ณด์.

Resource Owner๊ฐ Client์ '๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธํ๊ธฐ' ๋ฑ์ ๋ฒํผ์ ํด๋ฆญํด ๋ก๊ทธ์ธ์ ์์ฒญํ๋ค. Client๋ OAuth ํ๋ก์ธ์ค๋ฅผ ์์ํ๊ธฐ ์ํด ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ Authorization Server๋ก ์ด๋์์ผ์ผ ํ๋ค. ์ด๋ฅผ ์ํด Client๋ Authorization Server๊ฐ ์ ๊ณตํ๋ Authorization URL์ response_type , client_id , redirect_uri , scope ๋ฑ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ํฌํจํ์ฌ ๋ณด๋ธ๋ค.
์๋ฅผ ๋ค์ด ์ด๋ค OAuth 2.0 ์๋น์ค์ Authorization URL์ด https://authorization-server.com/auth ๋ผ๋ฉด, ๊ฒฐ๊ณผ์ ์ผ๋ก Client๋ ์๋์ ๊ฐ์ URL์ ๋น๋ํ ๊ฒ ์ด๋ค.
https://authorization-server.com/auth?response_type=code
&client_id=29352735982374239857
&redirect_uri=https://example-app.com/callback
&scope=create+delete
Authorization Server์๊ฒ ๋ณด๋ผ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์๋์ ๊ฐ๋ค.
response_type : ๋ฐ๋์ code ๋ก ๊ฐ์ ์ค์ ํด์ผ ํ๋ค(์ธ์ฆ์ด ์ฑ๊ณตํ ๊ฒฝ์ฐ Authorization Code๋ฅผ ๋ฐ๊ฒ ๋๊ธฐ ๋๋ฌธ).client_id : ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ์ ๋ ๋ฐ๊ธ๋ฐ์ Client IDredirect_uri : ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ ๋ ๋ฑ๋กํ Redirect URIscope : ํด๋ผ์ด์ธํธ๊ฐ ๋ถ์ฌ๋ฐ์ ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ์ค์ฝํ๋?
์ค์ฝํ(Scope)๋ ํด๋ผ์ด์ธํธ์๊ฒ ํ์ฉ๋ ๋ฆฌ์์ค์ ๋ฒ์๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค. OAuth 2.0์ ์ด๋ฅผ ํตํด์ ์ ์ ๋ฆฌ์์ค์ ๋ํ ํด๋ผ์ด์ธํธ์ ์ ๊ทผ ๋ฒ์๋ฅผ ์ ํํ ์ ์๋ค. ์ค์ฝํ๋ ์๋ํฌ์ธํธ์ 1:1๊ด๊ณ๊ฐ ์๋๊ธฐ์, 1๊ฐ์ ์๋ํฌ์ธํธ๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง ์ ์๊ณ , ๊ทธ ๋ฐ๋๋ ๊ฐ๋ฅํ๋ค. ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํ๋ ๋ฆฌ์์ค ์๋ฒ๋ ์ธ์ฆ ์๋ฒ๊ฐ ์ ๊ณตํ๋ ํ์ฉ ์ค์ฝํ์ ๋ฐ๋ผ ์ ๋ณด๋ฅผ ๊ฐ๊ณตํ์ฌ ์๋ตํด์ผ ํ ์๋ฌด๊ฐ ์๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๋น๋ํ Authorization URL๋ก ์ด๋ํ Resource Owner๋ ์ ๊ณต๋ ๋ก๊ทธ์ธ ํ์ด์ง์์ ID์ PW ๋ฑ์ ์ ๋ ฅํ์ฌ ์ธ์ฆํ๋ค.
์ธ์ฆ์ด ์ฑ๊ณต๋์๋ค๋ฉด, Authorization Server ๋ ์ ๊ณต๋ Redirect URI๋ก ์ฌ์ฉ์๋ฅผ ๋ฆฌ๋๋ ์ ์ํจ๋ค. ์ด๋, Redirect URI์ Authorization Code๋ฅผ ํฌํจํ์ฌ ์ฌ์ฉ์๋ฅผ ๋ฆฌ๋๋ ์ ์ํจ๋ค.
Authorization Code๋?
: Client๊ฐ Access Token์ ํ๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์ ์ฝ๋์ด๋ค. ์ด ์ฝ๋๋ ์๋ช ์ด ๋งค์ฐ ์งง๋ค. (์ผ๋ฐ์ ์ผ๋ก 1~10๋ถ)
Client๋ Authorization Server์ Authorization Code๋ฅผ ์ ๋ฌํ๊ณ , Access Token์ ์๋ต๋ฐ๋๋ค. Client๋ ๋ฐ๊ธ๋ฐ์ Resource Owner์ Access Token์ DB์ ์ ์ฅํ๋ค.
Access Token์ ์ ์ถ๋์ด์๋ ์ ๋๊ธฐ์ ์ 3์๊ฐ ๊ฐ๋ก์ฑ์ง ๋ชปํ๋๋ก HTTPS ์ฐ๊ฒฐ์ ํตํด์๋ง ์ฌ์ฉ๋ ์ ์๋ค.
Authorization Code์ Access Token ๊ตํ์ token ์๋ํฌ์ธํธ์์ ์ด๋ฃจ์ด์ง๋ค. ์๋๋ token ์๋ํฌ์ธํธ์์ Access Token์ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํ HTTP ์์ฒญ์ ์์์ด๋ค.
POST /oauth/token HTTP/1.1
Host: authorization-server.com
grant_type=authorization_code
&code=xxxxxxxxxxx
&redirect_uri=https://example-app.com/redirect
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx
๋งค๊ฐ๋ณ์๋ฅผ ์ดํด๋ณด์.
์ ๊ณผ์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ง์น๋ฉด Client๋ Resource Owner์๊ฒ ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ์์์ ์๋ฆฐ๋ค.
์ดํ Resource Owner๊ฐ Resource Server์ ๋ฆฌ์์ค๊ฐ ํ์ํ ๊ธฐ๋ฅ์ Client์ ์์ฒญํ๋ค. Client๋ ์ ๊ณผ์ ์์ ๋ฐ๊ธ๋ฐ๊ณ DB์ ์ ์ฅํด๋ Resource Owner์ Access Token์ ์ฌ์ฉํ์ฌ ์ ํ๋ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ณ , Resource Owner์๊ฒ ์์ฌ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
์์ 'OAuth 2.0 ๋์ ๋ฉ์ปค๋์ฆ'์์๋ Authorization Code๋ฅผ ๋ฐ์ ์ธ์ฆํ๋ ๋ฐฉ์์ ์ค๋ช ํ๋ค. ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋๋ฉฐ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ฐฉ์์ด๋, ์ด์ ๋๋ถ์ด ์ด 6๊ฐ์ง์ ์ธ์ฆ ๋ฐฉ์์ด ์๋ค.
Authorization Code Grant
: ์ผ๋ฐ์ ์ธ ์น์ฌ์ดํธ์์ ์์
๋ก๊ทธ์ธ๊ณผ ๊ฐ์ ์ธ์ฆ์ ๋ฐ์ ๋ ๊ฐ์ฅ ๋ง์ด ์ฐ๋ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๊ณ ์๋ ๋ฐฉ์์ด๋ค. 'OAuth 2.0 ๋์ ๋ฉ์ปค๋์ฆ'์์ ์ค๋ช
ํ ๋ฐ์ ๊ฐ๋ค.
Implicit Grant
: Public Client์ธ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์
(Javascript application)์ด๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ๋ก Resource Server์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์์ด๋ค.
Resource Owner Password Credentials Grant
: Client์ ์์ด๋/ํจ์ค์๋๋ฅผ ๋ฐ์ ์์ด๋/ํจ์ค์๋๋ก ์ง์ access token์ ๋ฐ์์ค๋ ๋ฐฉ์์ด๋ค. Client๊ฐ ์ ์ฉ์ด ์์ ๋์๋ ์ฌ์ฉํ๊ธฐ์ ์ํํ๋ค๋ ๋จ์ ์ด ์๋ค. ํด๋ผ์ด์ธํธ๊ฐ ํ์คํ ์ ์ฉ์ด ๋ณด์ฅ๋ ๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์์ด๋ค.
Client Credentials Grant
: ์ ํ๋ฆฌ์ผ์ด์
์ด Confidential Client์ผ ๋ id์ secret์ ๊ฐ์ง๊ณ ์ธ์ฆํ๋ ๋ฐฉ์์ด๋ค.
Device Code Grant
: ์ฅ์น ์ฝ๋ ๋ถ์ฌ ์ ํ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๊ฑฐ๋ ์
๋ ฅ์ด ์ ํ๋ ์ฅ์น์์ ์ฌ์ฉ๋๋ค.
Refresh Token Grant
: ๋ฆฌํ๋ ์ ํ ํฐ์ ์ ์ฅํด๋๋ ๋ฐฉ์์ด๋ค. ์ก์ธ์ค ํ ํฐ์ ์ฌ๋ฐ๊ธ ๋ฐ์ ํ์๊ฐ ์์ ๋ ๋ฆฌํ๋ ์ ํ ํฐ์ ์ฌ์ฉํ๊ณ , ๊ธฐ์กด์ ์ก์ธ์ค ํ ํฐ์ ๋ง๋ฃ๋๋ค.
(+) in-progress ์ํ์ธ OAuth 2.1์ Grant์์๋ Implicit๊ณผ Resource owner password credentials ๋ฐฉ์์ ์ง์ํ์ง ์์ ์์ ์ด๋ค.
๐ ๋ง์น๋ฉฐ
์ ๋ฆฌํด ๋ณด์๋ฉด, OAuth๋ '์ธ์ฆํ๊ณ , ์ ๊ทผ ๊ถํ์ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ'์ด๊ณ , OAuth 2.0์ Client๊ฐ Resource Owner์ ์ธ์ฆ์ ํตํด Authorization Server๋ก๋ถํฐ ์ ๊ทผ ๊ถํ(Access Token)์ ๋ฐ์์ Resource Server์ ์ ๊ทผํ๊ฒ ๋๋ ๋์ ๋ฐฉ์์ด๋ค.