๋ชฉ์ฐจ
1. OAuth2์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ (OAuth2๋ ์ ํ์ํ๊ฐ?)
2. ๊ทธ๋์ OAuth2๋?
3. OAuth2 ๊ด๋ จ ์ฉ์ด ์ ๋ฆฌ
4. OAuth2์ ๋์ ๊ณผ์
1. OAuth์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ (OAuth2๋ ์ ํ์ํ๊ฐ?)
ํ IT ์๋น์ค ์์ฅ์๋ ๊ตฌ๊ธ์ด๋ ์๋ง์กด, ํธ์ํฐ์ ๊ฐ์ ๋ฉ๊ฐ๊ธ ๊ธฐ์
๋ค์ด ๋ค์ ์กด์ฌํ๋ค. ์ด ๊ธฐ์
์ ์ฌ์ฉ์๋ค์ ์์ฒ๋ง ๋ง๊ฒ๋ ์ต๋ ๋จ์๋ก ๋์ด๊ฐ๋ค. ๊ทธ ๋งํผ ํด๋น ๊ธฐ์
๋ค์ด ๊ฐ์ง ๋ฆฌ์์ค๋ ๋ค์ ์กด์ฌํ ๊ฒ์ด๋ค. ํ์ง๋ง, ๋จ์ฒด์ํ์ ํด๋ดค๋ค๋ฉด ์ ์์๋ฏ์ด ํ๋์ ์ผ์ ์์
์ ์ ์์ด ๋ง์กฑํ๋ ๋ฐฉ์์ผ๋ก ์ํํ๋ค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค. A๋ ์๋ฅ ์์
์ ๋ ์๋ฒฝํ ํ๊ณ ๋ค์ ์ผ๋ก ๊ฐ์ผ๋ฉด ์ข๊ฒ ๊ณ , B๋ ๊ทธ์ ๋ณธ ์์
์ ๋นจ๋ฆฌ ์งํํ๊ณ ์ถ์ ์๋ ์๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ํน์ ์๋น์ค๋ฅผ ์ด์ฉํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. A๋ ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ๋ ๋ง์ ๊ธฐ๋ก์ด ๊ฐ๋ฅํ๊ณ , ๋ฐ์คํฌํฑ ์ฑ ํํ๋ก ์ปดํจํฐ์ ๋ด์ฅํ๊ณ ์ฐ๊ณ ์ถ์ ์ ์๋ค. B๋ ๊ตฌ๊ธ ํผํธ๋์ค ๋ฐ์ดํฐ๊ฐ ๋ฆฌํฌํธ ํํ๋ก ๋จ๊ธธ ์ํ๋ค. ์ง๊ธ์ ํํ๋ ๋ณด๋ ์
์ฅ์์ ๋๋ฌด ํฌ๋ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ๊ธฐ์
์์ ์ ๊ณตํ ์ ์๋ ์ข์ ํ๋ฆฌํฐ์ ์๋น์ค๋ ๊ฒฝ์ ์ ์ผ๋ก ํ์ ๋์ด ์๋ค. ์ด์ ๋ง์ ๋ฉ๊ฐ๊ธ ๊ธฐ์
๋ค์ด ์ 3์์๊ฒ ์์ ๋ค์ Resource๋ฅผ ๊ฐ์ ธ๋ค ์ธ ์ ์๋๋ก ์ฐฝ๊ณ ๋ฌธ์ ์ด์ด๋๋๋ค. ์ด๊ฒ์ด ๊ธฐ์
๋ณ API์ผ ๊ฒ์ด๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์๋ค์๊ฒ ๋ ์ข์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ค ํ๋ค๋ ๊ฒ์ ์๊ฒ ์ง๋ง, ์ฌ๊ธฐ๋ ๋ฌธ์ ๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด A๋ผ๋ ์ฌ๋์ ๊ตฌ๊ธ ํผํธ๋์ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด, ํด๋น A๋ผ๋ ์ฌ๋์ ์ ๊ทผ๊ถํ ์ฆ ID์ PASSWORD๊ฐ ํ์ํ๊ฒ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ์ด๋ฐ ์์ ๋ฐฉ๋ฒ์ ์๊ฐํ ์๋ ์๊ฒ ๋ค.
์ด๋ฐ ํํ๋ก ๋ก์ง์ ์ง ๋ค๋ฉด ๋ถ๋ช Third-party์ธ ์ฐ๋ฆฌ ์ฑ์ด ๊ตฌ๊ธ API๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์๊ฒ ๋ง์ถค ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์์ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
์ ๋ง ์น๋ช ์ ์ธ ๋ฌธ์ ๋ค. ์ฌ์ฉ์๋ค์ PASSWORD๋ฅผ ๋ค๋ฅธ ์ฌ์ดํธ์์๋ ๋๋ ค์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ์ ํผํด๊ท๋ชจ๊ฐ ๋ ์ปค์ง ์ ์๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ์ฉ์, ์ 3์ ์๋น์ค, ๊ตฌ๊ธ ๋ชจ๋์๊ฒ ๋ถ๋ด์ด ํฌ๋ค. ์ฌ์ฉ์๋ ์์ ์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์์ง ์ ๋ขฐ๊ฐ ๊ฐ์ง ์๋ ์ฌ์ดํธ์ ๋งก๊ฒจ์ผ ํ๋ค๋ ๋ถ๋ด๊ฐ์ด ์๊ธฐ๊ณ , ์ 3์ ์๋น์ค๋ ํด๋น ๊ฐ์ธ์ ๋ณด๋ฅผ DB์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค๋ ์ํ ๋ถ๋ด์ด ์๊ธด๋ค. ์๋ค์ํผ ๋ฉ๊ฐ๊ธ ๊ธฐ์ ์ด ์๋๋ฏ๋ก ๋ณด์๋ ๊ทธ๋งํผ ๊ฐํ์ง ๋ชปํ ๊ฒ์ด๋ค. ๊ตฌ๊ธ์ ์์ ๋ค์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ 3์ ์๋น์ค๋ค์ด ์ ๋ถ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ด ์ผ๋ ค๋ ๊ฒ์ด๋ค.
(1) ์ด๋ฅผ ๋ง๊ธฐ ์ํ ๊ธฐ์ ๋ค์ ๋ชธ๋ถ๋ฆผ
๊ธฐ์ ๋ค์ ์์ ๋ค์ API๋ฅผ ์ด์ฉํ ์๋น์ค๋ฅผ ์ฅ๋ คํ๋ฉด์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ง๊ธฐ ์ํด ์ ๋ง๋ค ํด๊ฒฐ์ฑ ์ ๋ด๋์๋ค. ๊ตฌ๊ธ์AuthSUb, Yahoo์ BBAuth ๊ฐ ๋ํ์ ์ด๋ค. ์ด๋ฌํ ํ๋กํ ์ฝ์ ์๋ฆฌ๋ OAuth2์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ 3์ App์์ ๊ธฐ์ ์ผ๋ก ์ ํจํ ์ธ๊ฐ์ฝ๋๋ฅผ ๊ธฐ์ ์๊ฒ ๋ณด๋ด๋ฉด, ํด๋น ๊ธฐ์ ์ ์์ ์ API์ ์ ๊ทผํ ์ ์๋ ์ ๊ทผํ ํฐ์ ๋๋ ค์ฃผ์ด ๊ธฐ์ ๋ด ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ํด๋น ํด๊ฒฐ์ฑ ๋ค์ ์ด๋ ํ ํ์ค์ ๊ฐ์ง๊ณ ๋ง๋ค์ด์ง ๊ฒ์ด ์๋์๋ค. ๋ฐ๋ผ์ ๋ง์ฝ ์ 3์ ์ฑ์์ ๋ณต์์ ๊ธฐ์ API๋ฅผ ์ฐ๋ คํ๋ค๋ฉด, ๊ฐ ๊ธฐ์ ๋ณ ์ ์ฑ ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ๋ค์ ์ง์ผํ๋ค. ํ ๋ง๋๋ก ์ ์ง๋ณด์์ ๊ทน์ ์ด์๋ค.
(2) OAuth1.0์ ๋ฑ์ฅ
์ด๋ฌํ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ผ๋ก ๋ฑ์ฅํ ๊ฒ์ด ๊ถํ์์ ํ๋กํ ์ฝ์ธ OAuth1.0์ด๋ค. OAuth1.0์ ํธ์ํฐ์ Ma.gnolia๊ฐ ์ฃผ๋์ ์ผ๋ก ๊ฐ๋ฐํ์๋ค. ํ์ง๋ง OAuth1.0์ ๋ชจ๋ฐ์ผ ์ดํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์์๋ ์์ ์ ๋ณด์ฅํ์ง ๋ชปํ๋ ์ฌ๋ก๋ค์ด ๋ฑ์ฅํ๊ธฐ ์์ํ๋ค. ๊ทธ๋์ ์ด๋ฌํ ๊ธฐ์กด ์ฌ๋ก๋ค์ ๋ณด์ํ๊ณ 1.0๋ณด๋ค ์ข ๋ ํ๋กํ ์ฝ ๊ณผ์ ์ ๋จ์ํํ OAuth2.0์ด 2012๋ ์ ๋ฑ์ฅํ์๋ค. ใ
2. ๊ทธ๋์ OAuth2๋?
OAuth2์ ์๋ฆฌ๋ ๋ฐ์์ ๋ ๋ฏ์ด๋ณด๊ฒ ์ง๋ง, ํฐ ๊ทธ๋ฆผ์ ์์ ๊ทธ๋ฆผ๋ค๊ณผ ๊ฐ๋ค.
OAuth2์ ์๋ฆฌ๋ ์์ธํ ๋ฏ์ด๋ด๋ ์ฝ์ง๋ง, ๊ทธ๊ฒ์ ์ค๋ช ํ๋ ์ฉ์ด๋ค ์ค ํท๊ฐ๋ฆฌ๋ ๊ฒ์ด ์กฐ๊ธ ์๋ค. ๋ฐ๋ผ์ ํด๋น ์ฉ์ด๋ค์ ๋จผ์ ์ดํด๋ณด๊ณ , ๋ค์์ผ๋ก ์ ํํ ์๋ฆฌ์ ๋ํด ๋์ด๊ฐ๊ฒ ๋ค.
3. OAuth2์ ๋์ค๋ ์ฉ์ด ์ ๋ฆฌ
์์์๋ ์ฌ์ฉ์, ์ 3์์ฑ, ๊ตฌ๊ธ ์ด๋ ๊ฒ ์๊ฐ ํ์ง๋ง ์ด๊ฒ์ OAuth2 ๋ฌธ์์ ๋์ค๋ ์ ๋ฌธ์ ์ธ ์ฉ์ด๋ก ๋ฐ๊พธ์ด ์ค๋ช ํ๊ฒ ๋ค.
(1) Resource Owner
์ด๋ ํ ๋ฆฌ์์ค์ ์์ ๊ถ์ด ์๋ ์ฃผ์ฒด์ด๋ค. ๋ฐ๊ด๋์ด๋ผ๋ ์ฌ๋์ด ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ์์ ์ด 3์๋ฌ์ ํ ์ผ๋ค์ ์ญ ์จ๋จ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ๋ฌ๋ฉด, ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ์๋ ๊ทธ 3์ ํ ์ผ ๋ชฉ๋ก ๋ฆฌ์์ค์ ์์ ๊ถ์ ๋๊ตฌ์๊ฒ ์๋? ๊ตฌ๊ธ? ์๋๋ค ๋ฐ๊ด๋์จํํ
์๋ค. ๋ฐ๋ผ์ ๋ฐ๊ด๋์จ๊ฐ Resource Owner์ด๋ค.
ํํ ์ฐ๋ฆฌ๊ฐ ๋งํ๋ ์ฌ์ฉ์๋ฅผ ๋ ์ฌ๋ฆฌ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
(2) Authorization & Resource Server
Authorization Server๋, ์ ๊ทผ ๊ถํ์ Client์๊ฒ ์ฃผ๊ฒ ๋ค๋ Resource Owner๋ฅผ ์ธ์ฆํ๊ณ , Client์๊ฒ AccessToken์ ๋ฐ๊ธํด์ฃผ๋ ์๋ฒ์ด๋ค.
Resource Server๋, ๋ฆฌ์์ค ์ฆ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฒ์ด๋ค.
๊ธฐ์ ์ ๋ฐ๋ผ์ ์ด ๋ ๊ณผ์ ์ ํ๋์ ์๋ฒ ๋ด์ ๊ตฌ์ฑํ๊ณ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
(3) Client
์ฌ๋๋ค์ด ๋ง์ด ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ ์ค ํ๋์ผ ๊ฒ ์ด๋ผ๊ณ ์๊ฐ์ด ๋ ๋ค. ์๋ํ๋ฉด Client์ ๋ง ๋ป์ด ์๋ขฐ์ธ์ด๋ผ ์ 3์ ์ฑ์ ์ฌ์ฉ์๋ฅผ ์ง์นญํ๋ค๊ณ ์ฌ๊ธฐ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง CS์์ ๋ฐฐ์ ๋ Client์ Server์ ๊ด๊ณ๋ฅผ ๋ค์ ๋ ์ฌ๋ ค๋ณด์. Client๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ์ฃผ์ฒด๋ฅผ ์๋ฏธํ๊ณ , Server๋ ์์ฒญ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ ์ฃผ์ฒด๋ฅผ ์๋ฏธํ์๋ค.
์ด๊ฑธ OAuth2 ํ๋กํ ์ฝ์ ๋์ ํด๋ณด์. ๊ตฌ๊ธ์ด๋ ์นด์นด์ค ๊ฐ์ ๋๊ธฐ์ ์ ๋ฆฌ์์ค๋ฅผ ๋ฌ๋ผ๊ณ ํ๋ ์ฃผ์ฒด๊ฐ ๋๊ตฌ์๋๊ฐ?? Resource Owner (๋ฐ๊ด๋ ์จ) ์๋๊ฐ?? ์๋๋ค!! ๋ฆฌ์์ค๋ฅผ ๋ฌ๋ผ๊ณ ํ ์ฃผ์ฒด๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค ์ 3์ APP ์ด์๋ค!! ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๋ ์ 3์ APP์ ๋ปํ๋ค. ์๋ฒ๋ ์์์ ๋งํ๋ฏ์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ ์ฃผ์ฒด(๊ตฌ๊ธ, ํธ์ํฐ ๋ฑ)์ด๋ค.
(4) Redirect URI
์์ OAuth2 ๊ณผ์ ์ ํ๊ธฐ ์ํด์๋ ๊ผญ ํ์ํ ์ ์ฐจ๊ฐ ์๋ค. ๋ฐ๋ก Authorization Server๊ฐ ์ธ๊ฐ์ฝ๋๋ฅผ ์ ๋ฌํ RedirectURI๋ฅผ ๋ฏธ๋ฆฌ Server์ธก์ ๋ฑ๋กํด๋๋ ์ ์ฐจ์ด๋ค. ์ถํ์ ์ค๋ช
ํ๊ฒ ์ง๋ง Resource Owner๊ฐ ๊ถํ ์์์ ์ธ์ฆํ๋ฉด Server๋ Client์๊ฒ ์ธ๊ฐ์ฝ๋ (์ฐ๋ฆฌ ๊ณ ๊ฐ์ด ๋ํํ
๊ถํ ์์ํด์ค๋ ์ข๋ค ํ์ผ๋๊น '์์ ํ๊ฐ์ฆ' ์ค๊ฒ์ "์์ ํ๊ฐ์ฆ")๋ฅผ ๋ณด๋ด์ค์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ RedirectURI๋ ์์ ํ๊ฐ์ฆ์ ๋ฐ์ Client์ ์ฃผ์ ์ด๋ค. ์ด ์ฃผ์๋ฅผ ๋ฏธ๋ฆฌ ๋ฑ๋กํด๋๋ ์ด์ ๋, Client์ ๋ฏธ๋ฆฌ ํ์ ๋์ง ์์ ์ฃผ์๋ก ํ๊ฐ์ฆ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ๋ฅผ ์์ ์ ์ค๊ฐ์ ํ๊ฐ์ฆ์ ํ์ทจํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํจ์ด๋ค.
RedirectURI๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์์ ์ํด Https๋ง ํ์ฉ๋์ง๋ง, Local ํ๊ฒฝ ํ
์คํธ๋ฅผ ์ํด LocalHost์ ๊ฒฝ์ฐ ์์ธ์ ์ผ๋ก http๊ฐ ํ์ฉ๋๋ค.
(5) Client ID, Client Secret
์, ๋น์ ์ด ์ ๋ถ ์ฌ์
๊ถ์ ๋ฐ๋ธ ๊ฐ์ธ ์ฌ์
์๋ผ๊ณ ํ์. ๊ทธ๋ฌ๋ฉด ์ ๋ถ์์๋ ์์ ๋ค๊ณผ ์ฌ์
์ ํ ์ฌ์
์๋ฅผ ์ผ๋ฐ์ธ๋ค๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํด์ ๋น์ ์๊ฒ ์ ๋ถ ์ฌ์
ํ๊ฐ ์ฆ์๋ฅผ ๋ถ์ฌํ ๊ฒ์ด๋ค.
Client ID์ Client Secret ๋ํ ๋๊ฐ๋ค. ๊ตฌ๊ธ์ด๋ ์นด์นด์ค์ Client (์ฐ๋ฆฌ๋ค์ด ๋ง๋ค ์ 3์ APP)์ ๋ฑ๋ก ์์ผ ๋์ผ๋ฉด, Server์์๋ Client ID์ Client Secret์ ์ฐ๋ฆฌ์๊ฒ ์ค๋ค. (4)๋ฒ์ RedirectURI๊ฐ ์ธ๊ฐ์ฝ๋๋ผ๋ ์์ ํ๊ฐ์ฆ์ ๋ฐ๋ ๊ณผ์ ์ด๋ผ๊ณ ์ค๋ช
๋๋ ธ๋ค. ์ด์ ์ฐ๋ฆฌ๊ฐ data์ ๋ฐ๋ก ์ ๊ทผํ ์ ์๋ accessToken(์ง์ง ํ๊ฐ์ฆ)์ ๋ฐ๊ธฐ ์ํด์ ClientID, Client Secret (๊ฐ์ธ ์ฌ์
์ ๋ฑ๋ก์ฆ, ์ ๋ถ ์ฌ์
ํ๊ฐ ์ฆ์) ์ ์ธ๊ฐ ์ฝ๋ (์์ ํ๊ฐ์ฆ)์ Server์ ์ ์ถํ๋ฉด ๋๋ค.
4. OAuth2์ ๋์๊ณผ์
hudi๋ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌ๊ฐ ์ ๋์ด ์์๋ค. ์ด๊ฒ์ ๋๋ง์ ๋ฐฉ์์ผ๋ก ์ ๋ฆฌํด๋ณด๊ฒ ๋ค. ๊ณผ์ ํ๋ํ๋ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
(1) ๋ก๊ทธ์ธ ์์ฒญ (Resource Owner >> Client(Front))
Client(์ฐ๋ฆฌ ์ฑ)๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ Resource Owner๊ฐ Client์ ๋ฉ์ธ ํ์ด์ง์ ๋ค์ด์๋ค๊ณ ํ์. ์ฒ์ ๋ค์ด์๋ค๋ฉด ๋น์ฐํ ๋ก๊ทธ์ธ์ด ๋์ง ์์ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ์ ํด์ผํ๋ค. ์ฌ๊ธฐ์ Resource Owner๊ฐ '๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธ ํ๊ธฐ!'๋ฅผ ํด๋ฆญํ๋ค๋ฉด Client์๊ฒ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋ธ ๊ฒ์ด๋ค.
(2) ๋ก๊ทธ์ธ ์์ฒญ (Client(Front) >> Authorization Server)
์ด์ Client๋ ํด๋น ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ Server์๊ฒ,
'์ ๊ธฐ์, ์ ํฌ ์ฑ ๊ณ ๊ฐ๋ A๊ฐ ์ ๋ณด๊ณ ๋น์ ๋ค ์๋ฒ์ ์๋ ์๊ธฐ Data๋ฅผ ์ฐ๋ผ๊ณ ํ์ด์. ๊ทธ ์ ์ ์ด A์จ๊ฐ ์ง์ง ๋น์ ๋ค server์ ์กด์ฌํ๋ ์ฌ๋์ธ์ง ํ์ธํด๋ณด์๊ฒ ์ด์?
๋ง์ฝ์ A์จ๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ฌ๋์ด๋ผ๋ฉด, ์ ๊ฐ ๋ต๋ณ ์ฃผ์๋ฅผ ์๋ ค๋๋ฆดํ ๋, ๊ธ๋ก ์์ ํ๊ฐ์ฆ์ ๋ณด๋ด์ฃผ์ธ์!
PS(์ฌ๊ธฐ ์ ์ฌ์ ํ๊ฐ์ฆ์ด๋, server์์ ์ฐ๊ณ ์ถ์ ๋ฐ์ดํฐ์ ๋ฒ์, ๋ต๋ณ ์ฃผ์, ๋ณด๋ด์ฃผ์ค ๋ต๋ณ์ ์์ ๋ฑ์ ๋๋ดํด์ ๋ณด๋ด๋๋ฆฝ๋๋ค.)'
๋ผ๊ณ ํด์ผํ๋ค.
๋ญ ๋ง์ ๊ธธ์ด์ก์ง๋ง ํ๋ ์ผ์ ๋ค์๊ณผ ๊ฐ๋ค.
a. Resource Owner๊ฐ '๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธ ํ๊ธฐ'๋ฅผ ๋๋ ๋ค.
b. Client์์๋ Authorization Server URL์ Client_id(์ฌ์ ํ๊ฐ์ฆ), redirect_uri(๋ต๋ณ ์ฃผ์), Scope(์ฐ๊ณ ์ถ์ Data์ ๋ฒ์), response_type(๋ณด๋ด์ฃผ์ค ๋ต๋ณ ์์)์ ๋ด์์ ๊ทธ ์ฃผ์๋ก ํ๋ฉด์ Redirect ์ํจ๋ค. (ResourceOwner๊ฐ ์๋ฒ๋ ์ง์ ์ธ์ฆํ๋๋ก)
์๋ฅผ ๋ค์ด 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
(3) ๋ก๊ทธ์ธ ํ์ด์ง ์ ๊ณต
(2)๋ฒ์ ํตํด ํ๋ฉด์ ์๋ฒ๊ฐ ์ ๊ณตํ๋ ํ๋ฉด์ผ๋ก Redirect ๋์๋ค. ์๋ฒ๋ ์ฌ๊ธฐ์
์ ๊ฐ์ด Resource Owner๊ฐ ์์ ์ ์ธ์ฆํ ์ ์๋๋ก ํ๋ฉด์ ์ ๊ณตํ๋ค.
(4) ResourceOwner๊ฐ ID/PW๋ฅผ ํด๋น ํ์ด์ง์ ๊ธฐ๋ก ํ ์ ์ถ
ResourceOwner๊ฐ ID/PW๋ฅผ ์จ์ ์ ์ถํ๋ค.
(5),(6) ์ธ๊ฐ์ฝ๋ ๋ฐ๊ธํ์ฌ Redirect URL๋ก ์ ์ก
ResourceOwner๊ฐ ์์ ์ด Server์ ๊ณ ๊ฐ์์ ์ธ์ฆํ๋ค๋ฉด Server๋ ์ธ๊ฐ์ฝ๋ (์์ ํ๊ฐ์ฆ)์ ๋ฐ๊ธํ์ฌ RedirectURL์ ์ ์กํ๋ค. (์ธ๊ฐ ์ฝ๋๋ฅผ ์ฃผ๋ ๋ฐฉ์์ ํ์ฌ๋ง๋ค ๋ค๋ฅผ ์ ์๋๋ฐ, ๊ตฌ๊ธ์ ๊ฒฝ์ฐ์๋ ์ฟผ๋ฆฌ์คํธ๋ง ํํ๋ก RedirectURL ๋ค์ AuthorizationCode="" ํด์ ๋ถ์ฌ์ ์ค๋ค.)
์ด๋ AuthorizationCode๋ AccessToken์ ๊ฐ๊ธฐ ์ํ ์์ ํ๊ฐ์ฆ์ด๋ฏ๋ก ์๋ช ์ด ๋๊ฒ ์งง๋ค(1~10๋ถ ์ด๋ด)
(7) Client(BACK)์ด ์ธ๊ฐ์ฝ๋, ClientID, Client Secret์ ๊ฐ์ง๊ณ AccessToken์ ์์ฒญ
์ด์ Client๋ ์ธ๊ฐ์ฝ๋, Client ID, Client Sercret์ ๊ฐ์ง๊ณ Server์ AccessToken์ ์์ฒญํ๋ค.
(8) AccessToken ๋ฐ๊ธ
๋ง์ฝ 7๋ฒ์ ์ฌํญ๋ค์ด ์ ํจํ๋ค๋ฉด Server๋ Client์๊ฒ AccessToken์ ๋ฐ๊ธํด์ค๋ค. ์ด์ Client๋ ๋ฐ๊ธ๋ฐ์ AccessToken์ DB์ ์ ์ฅํ๊ณ , Resource Server๋ฅผ ์ด์ฉํด ํด๋น ์ ์ ๋ฅผ ์ํ ์๋น์ค๋ฅผ ์ ๊ฐํ๋ฉด ๋๋ค.
์ด๋ Access Token์ ์ ์ถ๋์ด์๋ ์๋๋ค. ๋ฐ๋ผ์ ์ 3์๊ฐ ๊ฐ๋ก์ฑ์ง ๋ชปํ๋๋ก HTTPS ์ฐ๊ฒฐ์ ํตํด์๋ง ์ฌ์ฉ๋ ์ ์๋ค.
Authorization Code์ Access Token ๊ตํ์ token ์๋ํฌ์ธํธ์์ ์ด๋ฃจ์ด์ง๋ค. ์๋๋ token ์๋ํฌ์ธํธ์์ Access Token์ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํ HTTP ์์ฒญ์ ์์์ด๋ค. ์ด ์์ฒญ์ application/x-www-form-urlencoded ์ ํ์์ ๋ง์ถฐ ์ ๋ฌํด์ผํ๋ค.
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
ํ์๋ก ์ ๋ฌํด์ผํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ดํด๋ณด์.
- grant_type : ํญ์ authorization_code ๋ก ์ค์ ๋์ด์ผ ํ๋ค. (์ฐธ๊ณ )
- code : ๋ฐ๊ธ๋ฐ์ Authorization Code
- redirect_uri : Redirect URI
- client_id : Client ID
- client_secret : RFC ํ์ค์ ํ์๋ ์๋์ง๋ง, Client Secret์ด ๋ฐ๊ธ๋ ๊ฒฝ์ฐ ํฌํจํ์ฌ ์์ฒญํด์ผํ๋ค.
(9) ๋ก๊ทธ์ธ ์ฑ๊ณต
์ ๊ณผ์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ง์น๋ฉด Client ์ธก์์ ResourceOwner์๊ฒ ๊ถํ ์์ ์ ์ฐจ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ์์ ์๋ฆฐ๋ค.
(10) ~(13) Access Token์ ์ด์ฉํ Resource ์ ๊ทผ ๋ฐ ์ด๋ฅผ ์ด์ฉํ ์๋น์ค ์ ๊ฐ
์ด์ ResourceOwner๊ฐ Client์๊ฒ Resource๋ฅผ ํ์๋ก ํ๋ ์ด๋ค ์์
์ ์์ฒญํ๋ฉด, Client๋ ์ ์ ๋ฐ๊ธ ๋ฐ์๋ AccessToken์ ๋ค๊ณ ResourceServer์๊ฒ ๋ฐฉ๋ฌธํ๋ค.
ResourceServer๋ Token ํ์ธ ํ Client๊ฐ ํ์๋ก ํ๋, Data๋ฅผ ์ ๊ณตํ๋ค.
Client๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ํตํด ์์ฌ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
5. ์ธ๊ฐ์ฝ๋๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ๋ ์ด์ ?
์๋ ์์ํ๊ฐ์ฆ์ ๋ฐ๊ธํ๊ณ ํ๊ฐ์ฆ์ ๋ค์ ์์ฒญํ๋ ์ ์ฐจ๋ฅผ ์ ๋ฃ์์๊น? ๊ทธ๋ฅ ResourceOwner๊ฐ ๋ก๊ทธ์ธ ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด Server์์ ๋ฐ๋ก RedirectURL ์ฃผ์๋ก AccessToken์ ์ฃผ๋ฉด ์๋๋ ๊ฑธ๊น? ๋จผ์ ์์ ๋์๊ณผ์ ์์ ์ดํด๋ดค๋ ์ธ๊ฐ์ฝ๋ ๋ฐ๋ ๊ณผ์ ์ ๋ํด ์ดํด๋ณด์
๋ณด์๋ค์ํผ ๋๋ฒ์ Redirect ๊ณผ์ ์ด ํ์์ ์ด๋ค. ์๋ํ๋ฉด, ํด๋น ๋ก๊ทธ์ธ ์ธ์ฆ ๊ณผ์ ์ ResourceOwner์ ํ๋ฉด์ ๋์์ ธ์ ํด๋น ์ฌ๋์ด ๋์ผ๋ก ๋ณด๋ฉฐ ์ง์ ์งํํด์ผํ๋ ์์
์ด๋ฏ๋ก, Client Backend์ Server๊ฐ์ ๋ด๋ถ์ ์ผ๋ก ์ผ์ ์ฒ๋ฆฌํ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฐ๋ฐ Redirect ๊ณผ์ ์์๋ ๋๊ตฌ์๊ฒ๋ ๊ทธ ๋ด๋ถ ์ ๋ณด๊ฐ ๋ณด์์ผ๋ก AccessToken์ Redirect ์์ฒด์ ์ค์ด ๋ณด๋ด๋ ๊ฒ์ ํฐ ์ํ์ ๋๋ฐํ๋ค. ๋ฐ๋ผ์ ์์ ํ๊ฐ ์ฝ๋๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ํ๊ฐ์ฝ๋๋ฅผ ์ ๋ฌํ๋ฉด, Front๋ ๋ค์ Back์๊ฒ ๊ทธ๊ฒ์ ์ ๋ฌํ๊ฒ ๋๋ค. ์ด ๊ณผ์ ์์ ํ์ทจ ๋นํ๋ค ํด๋, AccessToken์ ์ป๊ธฐ ์ํด์๋ ํ๊ฐ์ฝ๋ ์ธ์ ClientID ๋ ClientSecret ๊ฐ์ ๋ค๋ฅธ ํ๋ผ๋ฏธํฐ๋ ์์ด์ผ ํจ์ผ๋ก AccessToken์ ํ์ทจํ ์ธ๊ฐ ์ฝ๋๋ก ๋ฐ๊ธ๋ฐ๊ธฐ๋ ์ฝ์ง ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ AccessToken ๋ฐ๊ธ ์์ฒญ๋ถํฐ ์์ํ๋ ๊ณผ์ ๋ค์ ์ผ์ผํ ResourceOwner์ ํ๋ฉด์ ๋์์ ธ์ ์งํ๋ ํ์๊ฐ ์๊ธฐ์, Backend์์ Server์ ๋ด๋ถ์ ์ผ๋ก ์ผ์ฒ๋ฆฌํ๋ฉด ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ธ๋ถ์ ์ฃผ์ ์ ๋ณด๋ค์ด ๋ณด์ด์ง ์๊ฒ๋๋ฏ๋ก ๊ณต๊ฒฉ์๊ฐ AccessToken์ ์ค๊ฐ์์ ๊ฐ๋ก์ฑ ์ ์๊ฒ ๋๋ค.