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์ ํด๋น ๋ช ์ธ ๊ณผ์ ์์ ์ ์ธ๋์ด์๋ค.)
  +--------+                                           +---------------+
  |        |--(A)------- Authorization Grant --------->|               |
  |        |                                           |               |
  |        |<-(B)----------- Access Token -------------|               |
  |        |               & Refresh Token             |               |
  |        |                                           |               |
  |        |                            +----------+   |               |
  |        |--(C)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(D)- Protected Resource --| Resource |   | Authorization |
  | Client |                            |  Server  |   |     Server    |
  |        |--(E)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(F)- Invalid Token Error -|          |   |               |
  |        |                            +----------+   |               |
  |        |                                           |               |
  |        |--(G)----------- Refresh Token ----------->|               |
  |        |                                           |               |
  |        |<-(H)----------- Access Token -------------|               |
  +--------+           & Optional Refresh Token        +---------------+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์ด ๋ง๋ฃ๋๋ฉด ์ฌ์ฉ์๋ ์ฌ๋ก๊ทธ์ธํด์ผํ๋ค.
	+--------+                                           +---------------+
  |        |--(A)------- Authorization Grant --------->|               |
  |        |                                           |               |
  |        |<-(B)----------- Access Token -------------|               |
  |        |               & Refresh Token             |               |
  |        |                                           |               |
  |        |                            +----------+   |               |
  |        |--(C)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(D)- Protected Resource --| Resource |   | Authorization |
  | Client |                            |  Server  |   |     Server    |
  |        |--(E)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(F)- Invalid Token Error -|          |   |               |
  |        |                            +----------+   |               |
  |        |                                           |               |
  |        |--(G)----------- Refresh Token ----------->|               |
  |        |                                           |               |
  |        |<-(H)----------- Access Token -------------|               |
  +--------+           & Optional Refresh Token        +---------------+Oauth๋ ๊ทธ๋์ ์ ์ฐ๋๊ฑด๋ฐ?
Client ์ ์ฅ์์๋ Resource server๋ฅผ ํตํด owner์ ์ ์์ ์ธ์ฆํ ์ ์๋ค. ๋ํ resource owner๋ client์๊ฒ ๊ตฌ๊ธ์ ID๋ PW๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋, ๊ตฌ๊ธ์ ์๋น์ค๋ฅผ client์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ฆ, ํจ์ฌ ๋ ์์ ํ๊ณ ๊ฐํธํ ๋ฐฉ๋ฒ์ผ๋ก ์๋ก๋ฅผ ์ธ์ฆํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค !
์ถ์ฒ
Last updated