OAuth ๋?
OAuth 1.0 Vs. 2.0
OAuth 1.0
OAuth 2.0
์น ์ํ์ ํ ๋ ๊ฐํธํ ํ์ ๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ ํ ์ ์๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์ฐพ์๋ณผ ์ ์๋ค. ์ฐ๋๋๋ ์ธ๋ถ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ facebook ๋ฐ twitter ๋ฑ์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ฅ์ ์ด ์๋ค. ์์ ๊ฐ์ ํธํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ด oauth์ด๋ค.
OAuth๋ ์ธํฐ๋ท ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋ค๋ฅธ ์น์ฌ์ดํธ ์์ ์์ ๋ค์ ์ ๋ณด์ ๋ํด ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ณตํต์ ์ธ ์๋จ์ผ๋ก์ ์ฌ์ฉ๋๋ ์ ๊ทผ ์์์ ์ํ ๊ฐ๋ฐฉํ ํ์ค์ด๋ค.(wikipedia)
oauth๋ ์ฝ๊ฒ ๋งํด์ ๋ค๋ฅธ ์๋น์ค์ ํ์ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฌ๊ธฐ์ ์์ ํ๊ฒ์ ์ฃผ์ฒด๋, ํ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ฃผ์ฒด, ์ฐ๋ฆฌ์ ๊ณ ๊ฐ์ด๋ค. ์ฆ, ๊ณ ๊ฐ์ด ์์ ํ๊ฒ ๋ค๋ฅธ ์๋น์ค์ ์ ๋ณด๋ฅผ ์ฐ๋ฆฌ ์๋น์ค์ ๊ฑด๋ค์ฃผ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค. ๊ณ ๊ฐ์ด ์์ ์ ๋ค์ด๋ฒ ์์ด๋, ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐ๋ฆฌ ์๋น์ค์ ์๋ ค์ฃผ์ง ์์๋, ๋ค์ด๋ฒ์ ์๋ ๊ณ ๊ฐ์ ์ ๋ณด๋ฅผ ์ฐ๋ฆฌ ์๋น์ค์์ ์์ ํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค.
ํ์ง๋ง oauth๋ ์ธ์ฆ authentication๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ 'ํ๊ฐ Authorization' ๋ํ ํฌํจํ๊ณ ์๋ค ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ OAuth ์ธ์ฆ์ ์งํํ ๋ ํด๋น ์๋น์ค ์ ๊ณต์๋ '์ 3์~' ์๋ด ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ค. (x, ํ๋ฆฌ๋ค๊ณ ๋ณผ ์ ์์)
์ผ๋ฐ์ ์ธ ๋ก๊ทธ์ธ๊ณผ OAuth๋ฅผ ์ด์ฉํ ๋ก๊ทธ์ธ์ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
์ผ๋ฐ ๋ก๊ทธ์ธ์ ํ์๊ฐ์ ํ ๋ ์ฌ์ฉํ๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ํตํ Authentication์ด๋ผ๋ฉด OAuth๋ฅผ ํตํ ๋ก๊ทธ์ธ์ ํ์ฌ ์๋น์ค(๋ค์ด๋ฒ, ์นด์นด์ค, ๊ตฌ๊ธ)์ ๊ณ์ ์ ๋ณด์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์๋น์ค์ ์ ๊ทผ์ Authorization์ ์ค์ ์ฌ์ฉ์๋ฅผ Authentication์ ํ๋ ๊ฒ ์ ๋๋ค.
Authentication/์ธ์ฆ
- ์ ์ ๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ์ ์ฐจ
Authorization/์ธ๊ฐ
- ์ ์ ์ ๋ํ ์ ๋ณด ๊ถํ์ ํ๋ฝํ๋ ๊ฒ
---
=> OAuth๋ authentication protocol์ ๋ด๋ถ์ ์ฌ์ฉ๋๋ ๊ฒ์ด๋ค. ์ค์ ๋ก OAuth๋ ์ ํ๋ฆฌ์ผ์ด์ ์๊ฒ authentication์ ๊ดํด์๋ ์๋ฌด๊ฒ๋ ์ํํ์ง ์๋๋ค. ์ค์ ๋ก user์ authentication ์ฆ๋ช ๋๋ฉด id_token์ด ๋ฐ๊ธ๋๊ณ id_token๊ณผ ๋ฐ๊ธ ๋ฐ์ id_token์ ์ด์ฉํ์ฌ access_token ๋ฐ๊ธ ์์ฒญ์ ์งํํ๋ค.
ID_token์ user๊ฐ authenticate๋๋ค๋ ๊ฒ์ ์ฆ๋ช ํ๋ค. ID ํ ํฐ์ ์ธํฐ๋ท์์ id ์ฃผ์ฅ์ ๊ณต์ ํ๋ ๋ฐ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋ openID Connect(OIDC, OIDC๋ JWT toekn์ ์ด์ฉํ๋ค.)์ ํ์คํ๋ ๊ธฐ๋ฅ์ด๋ค.
์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ณ id ํ ํฐ์ ์ป๊ธฐ ์ํด ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ ๊ทผ ๋ฐฉ์์ '์๋ฒ'ํ๋ฆ๊ณผ '์์์ 'ํ๋ฆ์ด๋ผ๊ณ ํ๋ค.
๋ ๊น๊ฒ ๋ค์ด๊ฐ๋ฉด ๋ ๋ง์ ๋ด์ฉ์ด ์์ง๋ง ๊ฒฐ๋ก ์ openID Connect๋ OAuth2.0์ ๊ฐ๋จํ ์ ์ ํ์ธ ์ต์์ ๋ ์ด์ด์ ํ๋กํ ์ฝ์ด๋ค.
ํ๋ฆ์ ์๋์์ ๋ฐฐ์ธ
- Authorization code : code
- Implicit : id_token, id_token token
- Hybrid code id_token, code token, code id_token token ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
OAuth 2.0์ด ์์์ ์ ๊ทผ๊ณผ ๊ณต์ ์ ๊ดํ ๊ฒ์ด๋ผ๋ฉด, OIDC๋ ์ธ์ฆ์ ๊ดํ ๊ฒ์ด๋ค. OIDC์ ๋ชฉ์ ์ ํ ๋ฒ์ ๋ก๊ทธ์ธ์ผ๋ก ์ฌ๋ฌ ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ํ๋ ๊ฒ์ด๋ค. OIDC๋ฅผ ์ฌ์ฉํ๋ ์น์ฌ์ดํธ์ ๋ก๊ทธ์ธํ ๋๋ง๋ค, ์ฌ์ฉ์๋ OIDC ์ฌ์ดํธ(๊ตฌ๊ธ, ํ์ด์ค๋ถ, ์นด์นด์ค ๋ฑ๋ฑ)์ ๋ก๊ทธ์ธํ๋ฉด์ผ๋ก ์ ํ๋๊ณ ๋ก๊ทธ์ธ ํ์ ์ฌ์ฉํ๋ ค๋ ์น์ด๋ ์ฑ์ผ๋ก ๋์์ค๊ฒ ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ง์ฝ์ ๋ด๊ฐ ๊ตฌ๊ธ๊ณ์ ์ ์ด์ฉํ์ฌ OAuth2.0์ ๋ก๊ทธ์ธ ํ๋ฉด ๊ทธ ๋ OIDC๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. ์ฌ์ฉ์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌ๊ธ์ ์ธ์ฆ์ด ์ฑ๊ณตํ๊ณ OAuth์ ๋์ ์ ๋ณด์ ๊ถํ์ ์์ํ๋ฉด ๊ตฌ๊ธ์ ๋ค์ OAuth์๊ฒ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ณด๋ด๊ณ ์ธ๊ฐ๊ฐ ์น์ธ๋๋ค. ์ด ์ ๋ณด๋ JWT๋ฅผ ์ด์ฉํด์ ๋ฆฌํด๋๊ณ Client๋ ์์ธ์ค ํ ํฐ๊ณผ ์์ฒญํ๋ค๋ฉด id_token์ ๋ฆฌํด๋ฐ๊ฒ๋๋ค.
ํญ๋ชฉ | 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 ํธ์ถ ๋ฐ ๋ณด์ | ์๋ช | HTTPS ๊ธฐ๋ณธ ์๋ช :Resource Server๊ฐ ๋ณ๋๋ก ์๋ช ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ |
์ ํจ๊ธฐ๊ฐ | Access Token ์ ํจ๊ธฐ๊ฐ ์์ | Access Token ์ ํจ๊ธฐ๊ฐ ๋ถ์ฌ Refresh Token์์ ๋ฐฐ์ด ๋ด์ฉ ๋ ์ฌ๋ฆฌ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. |
์ฉ์ด | ์ค๋ช |
---|---|
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์ ์ฌ์ดํธ์ ๊ถํ์ ๊ฐ์ง๊ณ ์ธ์ฆ์ ์งํ ํ ์ ์๋ค.
-
User๊ฐ Consumer์ ๊ธ์ ์ฐ๊ณ โService Provider์๋ ๋จ๊ธฐ๊ธฐโ ๋ฒํผ์ ๋๋ฅธ๋ค.
-
Consumer๋ ์์ ์ ๋ฑ๋ก ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก Signature๋ฅผ ๋ง๋ค๊ณ Service Provider์๊ฒ Signature๋ฅผ ๋ณด๋ด์ ์ฌ์ฉ์๋ก๋ถํฐ ๊ถํ ๋ถ์ฌ ์์ฒญ์ ๋ฐ์์์ Service Provider์๊ฒ ์๋ฆฌ๊ณ , Service Provider๋ ๊ถํ ๋ถ์ฌ ์์ฒญ์ ํ์ธํ๋ค๋ ์์ ์ฆํ(Request Token)๋ฅผ ์ ์ฅํ๊ณ Request Token์ Consumer์๊ฒ ๋ฐ๊ธํ๋ค. (1)
-
Consumer๋ ๊ถํ ๋ถ์ฌ ์์ฒญ ํ์ธ ์ฆํ(Request Token)์ ํจ๊ป User์ ์์ฒญ์ Service Provider์ ์ธ๊ฐ(๊ถํ ๋ถ์ฌ) ํ๋ฉด์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธํ๋ค.
-
User๊ฐ Service Provider์ ๋ก๊ทธ์ธ ํ ์ํ๊ฐ ์๋๋ผ๋ฉด ๋ก๊ทธ์ธ ํ๋ค. (2)
-
์ธ๊ฐ ํ๋ฉด์๋ โConsumer์๊ฒ ๊ถํ ๋ถ์ฌโ ๋ฒํผ์ด ํ์๋๋ค.
-
User๊ฐ โConsumer์๊ฒ ๊ถํ ๋ถ์ฌโ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, Service Provider๋ User๊ฐ (Request Token์ ํ์ธํ๊ณ ) Consumer์๊ฒ ๊ถํ์ ๋ถ์ฌํ์์ ํ์ธํ๊ณ , ํ์ธ ์ฝ๋(Verifier ๋๋ Authorization_code)๋ฅผ ์ ์ฅ ๋ฐ User์๊ฒ ๋ฐํํ๊ณ Consumer๊ฐ ์ ๊ณตํ๋ callback ํ๋ฉด์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธํ๋ค. (3)
-
๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ํตํด ๊ถํ ๋ถ์ฌ ํ์ธ ์ฝ๋๋ฅผ ์ ๋ฌ ๋ฐ์ Consumer๋ Consumer Key, Request Token, Verifier ๋ฑ์ ๋์์ผ๋ก Consumer Secret, Request Token Secret๋ฅผ ์ด์ฉํด์ Signature๋ฅผ ๋ง๋ค๊ณ Service Provider์๊ฒ Signature๋ฅผ ๋ณด๋ธ๋ค.
-
Service Provider๋ Consumer๊ฐ ๋ณด๋ธ Signature๋ฅผ ํ์ธํ๊ณ User๋ง ์ ๊ทผํ ์ ์์๋ ๋ณดํธ ์์์ ๋ํ ์ ๊ทผ ์ฆํ(Access Token)๋ฅผ Consumer์๊ฒ ๋ฐ๊ธํ๋ค.
-
์ดํ Consumer๋ Access Token๋ฅผ Service Provider์๊ฒ ๋ณด์ฌ์ฃผ๋ฉด์ User๋ฅผ ๋์ ํด์ ๋ณดํธ ์์์ ์ ๊ทผํ๋ค.
ํ์ฌ ๋ฐฉ๋ฌธ ๊ณผ์ ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ด๋ค์์ผ๋ก oauth๊ฐ ์งํ๋๋์ง ์ดํด๋ณด์. ์ถ์ฒ
ํ์ฌ ๋ฐฉ๋ฌธ ๊ณผ์ | OAuth ์ธ์ฆ ๊ณผ์ |
---|---|
1. ๋๋ฐฉ๋ฌธ์จ๊ฐ ์๋ด๋ฐ์คํฌ์์ ์ ๋ฌด์ ์ธ ๋ชฉ์ ์ผ๋ก ๊น๋ชฉ์ ์จ๋ฅผ ๋ง๋๋ฌ ์๋ค๊ณ ๋งํ๋ค. | Request Token์ ์์ฒญ๊ณผ ๋ฐ๊ธ |
2. ์๋ด ๋ฐ์คํฌ์์๋ ๊น๋ชฉ์ ์จ์๊ฒ ๋๋ฐฉ๋ฌธ์จ๊ฐ ๋ฐฉ๋ฌธํ๋ค๊ณ ์ฐ๋ฝํ๋ค. | ์ฌ์ฉ์ ์ธ์ฆ ํ์ด์ง ํธ์ถ |
3. ๊น๋ชฉ์ ์จ๊ฐ ์๋ด ๋ฐ์คํฌ๋ก ์ฐพ์์ ๋๋ฐฉ๋ฌธ์จ์ ์ ์์ ํ์ธํด ์ค๋ค. | ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์๋ฃ |
4. ๊น๋ชฉ์ ์จ๋ ์ ๋ฌด ๋ชฉ์ ๊ณผ ์ธ์ ์ฌํญ์ ์๋ด ๋ฐ์คํฌ์์ ๊ธฐ๋กํ๋ค. | ์ฌ์ฉ์์ ๊ถํ ์์ฒญ ๋ฐ ์๋ฝ |
5. ์๋ด ๋ฐ์คํฌ์์ ๋๋ฐฉ๋ฌธ ์จ์๊ฒ ๋ฐฉ๋ฌธ์ฆ์ ๋ฐ๊ธํด์ค๋ค. | Access Token ๋ฐ๊ธ |
6. ๊น๋ชฉ์ ์จ์ ๋๋ฐฉ๋ฌธ์จ๋ ์ ํด์ง ์ฅ์๋ก ์ด๋ํด ์ ๋ฌด๋ฅผ ์งํํ๋ค. | Access Toekn์ ์ด์ฉํด ์๋น์ค ์ ๋ณด ์์ฒญ |
Access Token-๋ฐฉ๋ฌธ์ฆ
์ฉ์ด | ์ค๋ช |
---|---|
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์ ์ฌ์ฉํ ์ ์๋ค.
OAuth 1.0๊ณผ OAuth 2.0์ ์ฐจ์ด์ ์ ์ค๋ช ํ์์ค.
OAuth๋ ๋ฌด์์ธ๊ฐ์?
OAuth 1.0์ ์งํ ์ ์ฐจ๋ฅผ ์ค๋ช ํ์์ค.
OAuth 2.0์ ์ข ๋ฅ์ ๋ํด์ ์ค๋ช ํ์์ค.
OAuth 2.0 ์ธ์ฆ ๋ฐฉ์ ์ค 1๊ฐ์ง์ ์ ์ฐจ๋ฅผ ์ค๋ช ํ์์ค.