์ธํฐ๋ท ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋ค๋ฅธ ์น์ฌ์ดํธ ์์ ์์ ๋ค์ ์ ๋ณด์ ๋ํด ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ณตํต์ ์ธ ์๋จ์ผ๋ก์ ์ฌ์ฉ๋๋ ์ ๊ทผ ์์์ ์ํ ๊ฐ๋ฐฉํ ํ์ค์ด๋ค.
- ๊ฐ์ธ์ ๋ณด๋ฅผ ์ฌ๋ฌ ๊ณณ์ ์ ๋ ฅํ๋ฉด์ ๋ณด์์ด ๋ถ์ํด์ง๊ณ , Application์ด ์์ ํ๋ค๋ ๋ณด์ฅ์ด ์์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ณด์ํ๊ธฐ์ํด์ Twitter๋ 2007๋ ์ OAuth 1.0์ ๋ง๋ค๊ฒ ๋๋ค.
- ์ผ๋ฐ ๋ก๊ทธ์ธ์ ํ์๊ฐ์ ์ ํ ๋ ์ฌ์ฉํ๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ํตํ ์ธ์ฆ(Authentication)์ด๋ผ๋ฉด OAuth๋ฅผ ํตํ ๋ก๊ทธ์ธ์ ํ์ฌ ์๋น์ค(๋ค์ด๋ฒ, ์นด์นด์ค, ๊ตฌ๊ธ ๋ฑ)์ ๊ณ์ ์ ๋ณด์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์๋น์ค์ ์ ๊ทผ์ ํ๊ฐ(Authorization)์ ์ค์ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๋ ๊ฒ์ ๋๋ค.
- ์ธ์ฆ(Authentication): ์ ์ ๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ์ ์ฐจ - Who you are
- ์ธ๊ฐ(Authorization): ์ ์ ์ ๋ํ ์ ๋ณด ๊ถํ์ ํ๋ฝํ๋ ๊ฒ - What you can do
| ํญ๋ชฉ | OAuth 1.0 | OAuth 2.0 |
|---|---|---|
| ์ญํ | User Consumer Service Provider |
Resource Owner Client Resource Server Authorization Server |
| ํ ํฐ | Request Token Access Token |
Access Token Refresh Token |
| open API ํธ์ถ ๋ฐ ๋ณด์ | ์๋ช
HMAC์ ํตํด ์ํธํ |
HTTPS ๊ธฐ๋ณธ(HMAC ์ฌ์ฉ x) ์๋ช :Resource Server๊ฐ ๋ณ๋๋ก ์๋ช ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ |
| ์ ํจ๊ธฐ๊ฐ | Access Token ์ ํจ๊ธฐ๊ฐ ์์ | Access Token ์ ํจ๊ธฐ๊ฐ ๋ถ์ฌ. Refresh Token |
- HMAC: ํด์ฑ ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ๋ฉ์์ง์ ์๋ณ์กฐ๋ฅผ ๋ฐฉ์งํ๋ ๊ธฐ๋ฒ
| ์ฉ์ด | ์ค๋ช |
|---|---|
| User | Service Provider์ ๊ณ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด์, Consumer๋ฅผ ์ด์ฉํ๋ ค๋ ์ฌ์ฉ์(~๋ก ๋ก๊ทธ์ธํ๊ธฐ๋ฅผ ์ด์ฉํ๋ ๋) |
| Service Provider | OAuth๋ฅผ ์ฌ์ฉํ๋ Open API๋ฅผ ์ ๊ณตํ๋ ์๋น์ค(๋ค์ด๋ฒ, ์นด์นด์ค, ๊ตฌ๊ธ) |
| Consumer | OAuth ์ธ์ฆ์ ์ฌ์ฉํด Service Provider์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์น ์๋น์ค(๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธํ๊ธฐ๋ฅผ ์ฐ๋ ค๋ ์ฌ์ดํธ๋ ์ฑ) |
| Request Token | Consumer๊ฐ Service Provider์๊ฒ ์ ๊ทผ ๊ถํ์ ์ธ์ฆ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ. ์ธ์ฆ์ด ์๋ฃ๋ ํ์๋ Access Token์ผ๋ก ๊ตํํ๋ค. |
| Access Token | ์ธ์ฆ ํ Consumer๊ฐ Service Provider์ ์์์ ์ ๊ทผํ๊ธฐ ์ํ ํค๋ฅผ ํฌํจํ ๊ฐ |
- Consumer๊ฐ Servcie Provider์๊ฒ Request Token์ ์์ฒญํ๋ค.
- Service Provider๋ Request Token์ ๋๊ฒจ ์ค๋ค.
- Consumer๋ User๋ฅผ redirect ์์ผ์ Service Provider์์ ์ธ์ฆ์ํ๊ฒ ํ๋ค. (๋ก๊ทธ์ธ์ ํ๋ ๊ณผ์ )
- Consumer๋ Service Provider๋ก ๋ถํฐ Access Token์ ์์ฒญํ๋ค.
- Service Provider๋ Access Token์ ๋ฐ๊ธํ๋ค.
- Consumer๋ ์ด์ User์ ์ 3์ ์ฌ์ดํธ์ ๊ถํ์ ๊ฐ์ง๊ณ ์ธ์ฆ์ ์งํ ํ ์ ์๋ค.
-
OAuth์2๋ OAuth์1์ ์ ์ ์ ์ธ์ฆํ๋ก์ฐ, ์ ๋ฐ์ ์ธ ๋ชฉ์ ๋ง ๊ณต์ ํ๊ณ OAuth์1.0์ ์๋ก ์์ฑํ๊ฒ์ด๋ค. OAuth์1.0๊ณผ OAuth์2.0์ ์ฐจ์ด๋ ์ฑ ์ ํ๋ฆฌ์ผ์ด์ , ์น ์ ํ๋ฆฌ์ผ์ด์ , ๋ฐ์คํฌํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ์ ์ธ์ฆ๋ฐฉ์์ ๊ฐํํ๊ณ Consumer์ ๊ฐ๋ฐ ๊ฐ์ํ๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ ๋์๋ค.
-
์ธ์ฆ ์ ์ฐจ๊ฐ ๊ฐ์ํ ๋จ์ผ๋ก์จ ๊ฐ๋ฐ์๋ค์ด ๊ตฌํํ๊ธฐ ๋์ฌ์์ก๊ณ , ๊ธฐ์กด์ ์ฌ์ฉํ๋ ์ฉ์ด๋ ๋ฐ๋๋ฉด์ Authorizaiton server์ Resource์๋ฒ์ ๋ถ๋ฆฌ๊ฐ ๋ช ์์ ์ผ๋ก ๋์๋ค. ๋ํ ๋ค์ํ ์ธ์ฆ ๋ฐฉ์์ ์ง์ํ๊ฒ ๋๋ค.
| ์ฉ์ด | ์ค๋ช |
|---|---|
| Resource Server | OAuth2.0 ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์์์ ๊ด๋ฆฌํ๋ ์๋ฒ(๊ตฌ๊ธ,์นด์นด์ค, ๋ค์ด๋ฒ ๋ฑ๋ฑ) |
| Authorization Server | Client๊ฐ Resource Server์ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์ธ์ฆํ๊ณ ํ ํฐ์ ๋ฐ๊ธํด์ฃผ๋ ์๋ฒ(๊ตฌ๊ธ, ์นด์นด์ค, ๋ค์ด๋ฒ ๋ฑ) |
| Resource Owner | Resource Server์ ๊ณ์ ์ ์์ ํ๊ณ ์๋ ์ฌ์ฉ์ |
| Client | Resource Server์ API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํ๋ ์ฌ์ดํธ |
| Access Token | Resource Server์ ์์์ ์์ฒญํ ์ ์๋ ํ ํฐ |
| Refresh Token | Authorization Server์ Access Token์ ์์ฒญํ ์ ์๋ ํ ํฐ |
Resource Server : ์นด์นด์ค ์๋ฒ, ์์์ ๋ด๋นํ๋ ์๋ฒ
Authorization Server : ์นด์นด์ค ์๋ฒ, ๊ถํ์ ๋ด๋นํ๋ ์๋ฒ
Resource Owner : ์ฌ์ฉ์(๋)
Client : ๋ชจ๋ฅด๋ ์ฌ๋์ด ๋ง๋ ์ฌ์ดํธ
| ์ข ๋ฅ | ์ค๋ช |
|---|---|
| Authorization Code Grant | - Client๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์ ๋์ ํน์ ๋ฆฌ์์ค์ ์ ๊ทผ์ ์์ฒญํ ๋ ์ฌ์ฉ - resource ์ ๊ทผ์ ์ํด, Authorization Server์์ ๋ฐ์ ๊ถํ ์ฝ๋๋ก ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๋ ๋ฐฉ์ - ๋ค๋ฅธ ์ธ์ฆ ์ ์ฐจ์ ๋นํด ๋ณด์์ฑ์ด ๋๊ธฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. |
| Implicit Grant | - Authorization Code Grant์ ๋ค๋ฅด๊ฒ ๊ถํ ์ฝ๋ ๊ตํ ๋จ๊ณ๊ฐ ์๋ค. - Access Token์ ์ฆ์ ๋ฐํ ๋ฐ์ ์ด๋ฅผ ์ธ์ฆ์ ์ด์ฉํ๋ ๋ฐฉ์ |
| Resource Owner Password Credentials Grant | - Client๊ฐ ์ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ๋ํ ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช
์ ๊ตํํ๋ ๋ฐฉ์ - Resource Owner์์ id, pwd๋ฅผ ์ ๋ฌ๋ฐ์ Resource Server์ ์ธ์ฆํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ขฐํ ์ ์๋ client์์ ๊ฐ๋ฅ |
| Client Credentials Grant | - Client๊ฐ ์ปจํ ์คํธ ์ธ๋ถ์์ Access Token์ ์ป์ด ํน์ ๋ฆฌ์์ค์ ์ ๊ทผ์ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์ |
๊ถํ ๋ถ์ฌ ์น์ธ์ ์ํด ์์ฒด ์์ฑํ authorization code๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๋ง์ด ์ฐ์ด๊ณ ๊ธฐ๋ณธ์ด ๋๋ ๋ฐฉ์์ด๋ค. ๊ฐํธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ํน์ ์์์ ์ ๊ทผ์ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด๋ค. ๋ณดํต ํ์ฌ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณดํธ๋ ์์์ ์ ๊ณตํ๊ธฐ ์ํ ์ธ์ฆ์ ์ฌ์ฉ๋๋ค. refresh token์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๋ฐฉ์์ด๋ค.
1. client์์ Authorization server๋ก ๊ถํ ๋ถ์ฌ ์์ฒญ์ ๋ณด๋ธ๋ค.
2. ๋ก๊ทธ์ธ ํ์
์ฐฝ์ด ์ ๋ฌ๋๋ฉด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ ํ๋ค.
3. ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ๋ง๋ค๋ฉด ๊ถํ ๋ถ์ฌ ์น์ธ ์ฝ๋๋ฅผ client์ ์ ๋ฌํ๋ค.
4. client๋ authorization code๋ฅผ ํตํด access token ๋ฐ๊ธ์ ์์ฒญํ๋ค.
5. authorization server๋ ์๊ธฐ๊ฐ ๊ฐ์ง๊ณ ์๋ client id, client secret, authorization code๋ฅผ ์ ๋ฌ๋ฐ์ ์ ๋ณด์ ๋น๊ตํ์ฌ ๋์ผํ ๋ access token์ ์ ๋ฌํ๋ค.
6. client๋ resoruce server์๊ฒ ์ธ์ฆ์ ์ํ access token์ ์ ๋ฌํ๋ฉด์ ํ์ํ ์์์ ์์ฒญํ๋ค.
7. resource server๋ access token์ด ์ ํจํ๋ฉด ํด๋น ์์์ ์ ๊ณตํ๋ค.
- redirect_uri :์ธ์ฆ ์น์ธ ์ดํ redirect๋ url
- response_type :์ฌ์ฉ์ ์ํ๋ grant type ์ค์
- code :authorization code
- token :implicit
์๊ฒฉ์ฆ๋ช ์ ์์ ํ๊ฒ ์ ์ฅํ๊ธฐ ํ๋ ํด๋ผ์ด์ธํธ(javascript๋ฑ)์๊ฒ ์ต์ ํ๋ ๋ฐฉ์์ด๋ค. ์์์ ์น์ธ ๋ฐฉ์์์๋ ๊ถํ ๋ถ์ฌ ์น์ธ ์ฝ๋ ์์ด ๋ฐ๋ก access token์ด ๋ฐ๊ธ๋๋ค. Access token์ด ๋ฐ๋ก ์ ๋ฌ๋๋ฏ๋ก ๋ง๋ฃ๊ธฐ๊ฐ์ ์งง๊ฒ ์ค์ ํ์ฌ ๋์ถ์ ์ํ์ ์ค์ผ ํ์๊ฐ ์๋ค. Refresh token์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ๋ฐฉ์์ด๋ฉฐ, ๊ถํ ์๋ฒ๋ client secret์ ์ฌ์ฉํด ํด๋ผ์ด์ธํธ๋ฅผ ์ธ์ฆํ์ง ์๋๋ค.
1. Client๊ฐ ์ธ์ฆ์๋ฒ์๊ฒ ์ฌ์ฉ์ ๋ก๊ทธ์ธ ๋ฐ ๊ถํ ๋์ ์น ํ์ด์ง๋ฅผ ์์ฒญํ๋ค.
2. ๋ก๊ทธ์ธ ํ์
์ฐฝ์ด ์ ๋ฌ๋๋ฉด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ ํฉ๋๋ค.
3. ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ๋ง๋ค๋ฉด Redirect URL๋ก Authorization Code๊ฐ ์๋๋ผ Access token์ ์ ๋ฌํ๋ค.
4. ํ๋ํ Access token์ผ๋ก Resource Server์ API ์์ฒญ์ ๋ณด๋ธ๋ค.
๊ฐ๋จํ๊ฒ username, pwd์ access token์ ๋ฐ๋ ๋ฐฉ์์ด๋ค. refresh token ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์ค์ํ ์ ์ ์๋ฒ, ๋ฆฌ์์ค ์๋ฒ, ํด๋ผ์ด์ธํธ๊ฐ ๋ชจ๋ ๊ฐ์ ์์คํ ์ ์ํด ์์ ๋ ์ฌ์ฉ๋์ด์ผ ํ๋ ๋ฐฉ์์ด๋ค.
1. Resource Owner๋ ์ธ์ฆ์ ๋ณด๋ฅผ client์๊ฒ ์ง์ ์ ๋ฌํ๋ค.
2. Client๋ ์์ ๋ฐ์ ์ธ์ฆ ์ ๋ณด๋ฅผ Authorization Server๋ก ์ ์กํ์ฌ Access token์ ๋ฐ๊ธ๋ฐ๋๋ค.
3. ํ๋ํ Access token์ผ๋ก Resource Server์ API ์์ฒญ์ ๋ณด๋ธ๋ค.
์ด๋ฐฉ์์ Resource Owner์ id, pwd๊ฐ client์๊ฒ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ฏ๋ก client์ service provider๊ฐ ๊ฐ์ ๋๋ฉ์ธ, ์๋ฅ์ ๋ด์ ์กด์ฌํ์ฌ ์๋ก ์ ๋ขฐํ ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
Oauth 2.0์ ๊ถํ ๋ถ์ฌ ๋ฐฉ์ ์ค ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๊ฒฉ์ฆ๋ช ๋ง์ผ๋ก access token์ ํ๋ํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ์์ ์ด ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ํน์ ๊ถํ ์๋ฒ์ ํด๋น ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ ํ๋ ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ์ด ์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ค. ์ด ๋ฐฉ์์ ์๊ฒฉ ์ฆ๋ช ์ ์์ ํ๊ฒ ๋ณด๊ดํ ์ ์๋ ํด๋ผ์ด์ธํธ์์๋ง ์ฌ์ฉ๋์ด์ผ ํ๊ณ , refresh token์ ์ฌ์ฉํ ์ ์๋ค.



