OAuth Project
OAuth?
๐ก OAuth๋ Third party app์๊ฒ ์ ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ , ์ธ์ฆํ๊ธฐ ์ํด ๋ํ๋ ๊ฐ๋ ์ด๋ค. ์ฆ, Third party app๋ ์ ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ง ๋ชปํด๋, ์ฌ์ฉ์๊ฐ ํ๊ฐํ ์์์ ๋ํด ์ ๊ทผํ ์ ์๋๋ก ๋์์ค๋ค.
OAuth์๋ 4๊ฐ์ ์ฐธ์ฌ์๊ฐ ์กด์ฌํ๋ค. Third party App์ ํด๋นํ๋ Client, ์ค์ ์ฑ ์ฌ์ฉ์์ ํด๋นํ๋ Resource Owner, ์์ฒญ ๋ฐ์ดํฐ์ ๋ํด ์๋ต์ ์ฃผ๋ Resource server, ์ธ์ฆ์ ์ํํ๋ Authorization Server๊ฐ ์กด์ฌํ๋ค.
์ฐธ์ฌ์
Resource Owner
๋ณดํธ๋ ๋ฆฌ์์ค์ ๋ํด์ ์ก์ธ์ค๋ฅผ ๋ถ์ฌํ ์ ์๋ ์ฃผ์ฒด์ด๋ค. (end user๋ผ๊ณ ๋ถ๋ฅธ๋ค)
์ฑ์ผ๋ก ์ค๋ช ํ์๋ฉด, ์๊ณ ์์คํ ๋ด ์ฑ์ ์ฌ์ฉ์์ด๋ค. ์ด๋ค์ด ์์์ ๋ํ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ์ญํ ์ ํ๋ค. ShortcutsZip์์ ์ ํ๋ก ๋ก๊ทธ์ธ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋๋ฐ, ์ฒ์ ํ์๊ฐ์ ํ ๋ ์ด๋ฆ, ์ด๋ฉ์ผ, ๊ธฐํ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ฃผ์ฒด์ด๋ค.
Resource Server
๋ณดํธ๋ ๋ฆฌ์์ค๋ฅผ ํธ์คํ ํ๋ ์๋ฒ๋ก, access token์ ํตํด ์์ฒญ์ ๋ฐ๊ณ , ์๋ตํ๋ ์ญํ ์ ์ํํ๋ค.
ShortcutsZip์์๋ ๋ฐ๋ก ์ ์ ์ ์ ๋ณด๋ฅผ ์๊ตฌํ์ง ์์ง๋ง, ์๋ฅผ ๋ค์ด ์ฌ์ฉ์์ ํ๋กํ ์ ๋ณด, ์ฌ์ง, ์ด๋ฉ์ผ ์ฃผ์ ๋ฑ๊ณผ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋, ๊ทธ ์ ๋ณด๋ฅผ ํธ์คํ ํด์ฃผ๋ ์๋ฒ๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
Client
๋ด๊ฐ ๊ฐ๋ฐํ ์ฑ์ด๋ค. Resource server์์ ์ ๊ณตํ๋ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ณ ์ํ๋ ๊ณ์ธต์ด๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ฉ์ A์ ๊นํ๋ธ ์๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ค๊ณ ์ถ๋ค๋ฉด, Github Authorization Server์์ ์ธ์ฆ์ ๋ฐ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Resorce server์๊ฒ ์๋ ์ ๋ณด๋ฅผ ์์ฒญํ ์ ์๋ ๊ฒ์ด๋ค.
Authorization Server
Resource Owner๋ฅผ ์ธ์ฆํ๊ณ , ๊ถํ์ ์ป์ ํ์, Client์๊ฒ Access Token์ ๋ฐ๊ธํ๋ค.
์ฆ, ์ฌ์ฉ์๊ฐ Apple ์์ด๋๋ก ๋ก๊ทธ์ธ์ ํ๋ฉด, ์ฌ์ฉ์๊ฐ ์ ๊ณตํ๋ค๊ณ ์ฒดํฌํ ์ ๋ณด๋ฅผ ์์ ์ ์๋ฒ์ ์ ์ฅํ๋ค. ์ดํ์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Access Token์ ๋ฐ๊ธํ์ฌ Resource Server์๊ฒ ์ ๊ณตํ๊ฒ ๋๋ค.
์ ๋ฆฌํ์๋ฉด, Resource Owner๊ฐ Client๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค. ์ด๋ Resource Owner๋ Authorization Server๋ฅผ ํตํด ์์ ์ ์ธ์ฆํ๊ณ , ์ด๋ค ๊ถํ์ ํ์ฉํ ์ง ์ ํํ๋ค. ๊ทธ๋ฌ๋ฉด Authorization Server๋ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Access Token์ Client์ ์ ๊ณตํ๋ค. ์ดํ Client๋ Access Token์ ํตํด Resource Server์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์๊ณ , Resource server๋ ํ ํฐ๊ณผ ์์ฒญ์ ๋น๊ตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ฒ ๋๋ค.
(์์ง์ ๋จ์ด๊ฐ ์ต์ํ์ง ์์์ ํท๊ฐ๋ฆด ์ ์์ง๋ง, ์ฉ์ด๊ฐ ์ต์ํด์ง๋ฉด ๊ต์ฅํ ์ฌ์ธ ๊ฒ์ด๋ค.)
OAuth ๊ณผ์
์๋น์ค ๋ฑ๋ก โ Resource Server์ ์ธ์ฆ โ Authorization Server์ ์น์ธ โ Access Token ๋ฐ๊ธ์ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๊ฒ ๋๋ค. (refresh token์ ๋ณ๊ฐ) ๊ทธ๋ผ ์ด ๋จ๊ณ์ ๋ํด ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด์.
์๋น์ค ๋ฑ๋ก (
**Client Registration**
)Authorization Server์์ Client๋ฅผ ์๋ณํ ์ ์๋๋ก redirection URI์ ํจ๊ป ๋ฑ๋กํด์ผํ๋ค. ์ด ๊ณผ์ ์ ๊ฑฐ์น๋ฉด Client ID, Client Secret์ ๋ฐ๊ธ๋ฐ์ ์ ์๋ค.
client ID๋ ํด๋ผ์ด์ธํธ์ ์๋ณ์๋ก, Authorization server๊ฐ client๋ฅผ ์๋ณํ ๋ ์ฌ์ฉํ๊ฒ ๋๋ค. client secret์ ์ ์์ ํ์ธํ๊ณ , ํต์ ์ ์ ๋ขฐ์ฑ์ ์ค์ํ ์ญํ ์ ํ๋ ๊ฐ์ผ๋ก ์ ๋ ์ธ๋ถ๋ก ๋ ธ์ถ๋์ด์๋ ์ ๋๋ค.redirection URI๋ ์ฌ์ฉ์๊ฐ ์ธ์ฆ ํ์ redirection ์ํฌ ์ฃผ์์ด๋ค. ์ฆ, Authorization Code๋ฅผ ์ ๋ฌํด ์ค ์ฃผ์๋ฅผ ์๋ฏธํ๋ค.
Resource Owner์ ์ธ์ฆ
์๋น์ค ๋ฑ๋ก์ด ์๋ฃ๋๋ฉด Resorce Server๋ Client์ ID, Secret, Redirect URL์ ์๊ณ ์๋ค. ์ด๋ Resource owner๊ฐ ์ฐ๋ฆฌ ์ฑ์์ Resource server์ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด Client์์๋ ๊ทธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ก๊ทธ์ธ URL์ ํ๋ผ๋ฏธํฐ๋ก Client ID, Scope, Redirect URI๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ผ Authorization Server์์ ๋ก๊ทธ์ธ์ ํตํด ์ ์ ๋ ์์ ์์ ์ธ์ฆํ๋ค.
Authorization Server๋ ์์ ์ ์๋ฒ์์ ํด๋น Client ID๊ฐ ์๋์ง, ์์ฒญ์ด ์จ URI์, ์๋ฒ์ ์ ์ฅ๋ URI ๊ฐ์ด ๋์ผํ์ง ํ์ธํ๋ค. ์ดํ Resorce Owner์๊ฒ Scope์ ๋ํ ์ ๊ทผ๊ถํ์ ํ์ฉํ ๊ฒ์ธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ ๊ฒ์ด๋ค. ์ดํ ์ฌ์ฉ์๊ฐ ๊ถํ์ ํ์ฉํ Scope ๊ฐ์ Resorce Owner์ ID์ ํจ๊ป ์ ์ฅํ๊ฒ ๋๋ค.
Authorization Server์ ์น์ธ
Authorization Server๋ ๋ฐ๋ก Access Token์ ์ ๊ณตํด์ฃผ์ง ์๋๋ค!! ์์ ๋น๋ฐ๋ฒํธ์ธ Authorization code๋ฅผ Resource Owner์๊ฒ ์ ๋ฌํ๊ฒ ๋๋ค. ์ดํ ์ด ๊ฐ์ Client๊ฐ ๋ฐ์์ ๋ค์ Authorization Server์ authorization code, redirect URI, Client ID, Client Secret๋ฅผ ์ ๊ณตํ์ฌ ์ธ์ฆํ๊ฒ ๋๋ค.
๋ด๊ฐ Resource Owner๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ฑ์ ์๊ฐํด๋ณด์. ๋ด๊ฐ ๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด, WebView๋ฅผ ํตํด ๊ตฌ๊ธ์ฌ์ดํธ๊ฐ ๋์ฌ ๊ฒ์ด๋ค. ๋ด ์์ด๋๋ฅผ ์ ๋ ฅํ๊ณ , ์ด๋ค ๊ถํ์ ์ ๊ณตํ ๊ฒ์ธ์ง ํ์ธํ ํ์ ์ฐ๋ ๋ฒํผ์ ๋๋ ๋ค. ๊ทธ๋ฌ๋ฉด Redirect URI๋ฅผ ํตํด ๋ค์ ์ฑ์ผ๋ก ๋์์ค๊ฒ ๋๋ค. ์ด๋, ์ฐ๋ฆฌ์ ์ฑ์ธ Client๋ WKWebKit์
decidePolicyFor navigationAction
๋ฅผ ํตํด์ Authorization code ๊ฐ์ ์บ์นํ ์ ์๋ ๊ฒ์ด๋ค. ์ด ๊ฐ๊ณผ client secret ๋ฑ ์ ๋ณด๋ฅผ ๋ค์ Authorization server์๊ฒ ์ ๊ณตํ๋ ๋จ๊ณ์ธ ๊ฒ์ด๋ค.๋ง์ง๋ง! Acess Token ๋ฐ๊ธ
Authorization Server๋ ์๊น Client์๊ฒ Client ID, Secret, URI, Authorization code๊น์ง ๋ชจ๋ ๋ฐ์๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ Authorization Server๊ฐ ์ธ์ฆํ ์ ์ , ์ธ์ฆํ ํด๋ผ์ด์ธํธ๊ฐ ๋ ๊ฒ์ด๋ค. ์ด์ Authorization code๋ ์ญ์ ํ ํ์, Access Token์ ๋ฐ๊ธํด์ค๋ค.
์ด์ Resource Server์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋, Access Token์ ํตํด ์์ฒญ์ ํ๊ฒ ๋๋ฉด, ํด๋น Scope์ ๊ถํ์ด ์๋์ง ํ์ธํ๊ณ , ๊ทธ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํด์ฃผ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ ์ฒด์ ์ธ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค. (client registration์ ํด๋น ๋ช ์ธ ๊ณผ์ ์์ ์ ์ธ๋์ด์๋ค.)
Refresh token
Access Token์ ์๋ช ์ด ์ ํด์ ธ์๋ค. ์ด ์๋ช ์ด ๋๋๋ฉด, ํด๋น Access Token์ผ๋ก๋ Client๋ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์ธ์ฆ ์๋ฌ๋ผ๋ ์๋ต๋ง ๋ฐ๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ์๋ช ์ด ๋๋ ๋๋ง๋ค ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ ํด์ผํ ์๋ ์๋ค. ์ฐ๋ฆฌ๋ ์ด๋ Refresh Token์ ์ด์ฉํด์ ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์์ด Access Token์ ์๋ก ๋ฐ๊ธ๋ฐ์ ์ ์๋ค.
๋ณดํต Access Token์ ๋ฐ๊ธ๋ฐ์ ๋, Refresh Token์ ๊ฐ์ด ์ ๊ณตํด์ค๋ค. Resource Server์ AccessToken์ผ๋ก ํต์ ์ ํ๋ ์ค Invalid token error๊ฐ ๋ฐ์ํ๋ฉด, Client๋ Authorization Server์๊ฒ Refresh Token์ ๋ณด๋ด์ ๋ค์ Access Token์ ๋ฐ๊ธ๋ฐ๊ฒ ๋๋ค.
Refresh Token์ผ๋ก Access Token์ ์ฌ๋ฐ๊ธ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์, Refresh Token์ ์์ ํ๊ฒ ์ ์ฅ๋์ด์ผํ๋ฉฐ, Refresh Token์ด ๋ง๋ฃ๋๋ฉด ์ฌ์ฉ์๋ ์ฌ๋ก๊ทธ์ธํด์ผํ๋ค.
Oauth๋ ๊ทธ๋์ ์ ์ฐ๋๊ฑด๋ฐ?
Client ์ ์ฅ์์๋ Resource server๋ฅผ ํตํด owner์ ์ ์์ ์ธ์ฆํ ์ ์๋ค. ๋ํ resource owner๋ client์๊ฒ ๊ตฌ๊ธ์ ID๋ PW๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋, ๊ตฌ๊ธ์ ์๋น์ค๋ฅผ client์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ฆ, ํจ์ฌ ๋ ์์ ํ๊ณ ๊ฐํธํ ๋ฐฉ๋ฒ์ผ๋ก ์๋ก๋ฅผ ์ธ์ฆํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค !
์ถ์ฒ
Last updated