OAuth2(Open Authorization 2.0)๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ์ ์์ ํ๊ฒ ์์ํ๊ธฐ ์ํ ๊ฐ๋ฐฉํ ํ์ค ํ๋กํ ์ฝ์ด๋ค.
์ฆ, ์ฌ์ฉ์๊ฐ ์ง์ ์๊ฒฉ ์ฆ๋ช ์ ๋ ธ์ถํ์ง ์๊ณ ๋ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ (์: PhotoEditor)์ด ๋๋ฅผ ๋์ ํด ๋ด Google Photo ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋๋ก ์์ํ๋ค.
๐ก ํต์ฌ ๊ฐ๋
- OAuth2๋ ์ธ๊ฐ(Authorization) ํ์ค์ด๋ค.
- โ๋๊ฐ ๋๊ตฌ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋๊ฐโ๋ฅผ ๋ค๋ฃฌ๋ค.
- โ๋๊ฐ ๋ก๊ทธ์ธํ๋๊ฐโ(์ธ์ฆ)๋ ์๋ ๋ชฉ์ ์ด ์๋์์ผ๋, ์ดํ OpenID Connect๊ฐ ์ด๋ฅผ ํ์ฅํ๋ค.
๐ ์กฐ์ง ๋ด์์ ๋ณด์ ๋ก์ง์ ํตํฉ ๊ด๋ฆฌํ๊ณ ,
์๋น์ค(๋ฆฌ์์ค ์๋ฒ)๋ ๋น์ฆ๋์ค ๋ก์ง๋ง ๋ด๋นํ๊ฒ ํ๋ค.
PhotoEditor๊ฐ ๋ด Google Photos์ ์ ๊ทผํ๋ ค๊ณ ํ ๋:
| ์๋๋ฆฌ์ค | ๋ฌธ์ |
|---|---|
| OAuth2 ์์ | ์ฌ์ฉ์๊ฐ PhotoEditor์ Google ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ ๋ ฅํด์ผ ํจ โ ๋งค์ฐ ์ํ |
| OAuth2 ์์ | Google์ด ๋์ Access Token์ ๋ฐ๊ธ โ PhotoEditor๋ ์ฌ์ง ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ |
๐ ์ฌ์ฉ์๋ ์ธ์ ๋ ์ง Google ๊ณ์ ์์ PhotoEditor์ ๊ถํ์ ์ทจ์ํ ์ ์๋ค.
OAuth2์ ์ง์ ํ ๋ชฉ์ ์ ์ด โ์์๋ ์ธ๊ฐโ์ด๋ค.
| ๊ตฌ์ฑ์์ | ์ค๋ช | ์์ |
|---|---|---|
| Resource Owner | ์์์ ์์ ํ ์ฌ์ฉ์ | Google Photos์ โ์ฌ์ง ์ฃผ์ธโ |
| Client | ์์์ ์ ๊ทผํ๋ ค๋ ์ฑ | PhotoEditor |
| Authorization Server | ํ ํฐ์ ๋ฐ๊ธํ๊ณ ์ฌ์ฉ์ ์ธ์ฆ์ ๋ด๋น | Google Auth Server |
| Resource Server | ์ค์ ๋ฆฌ์์ค๋ฅผ ์ ์ฅํ๊ณ ์ ๊ณต | Google Photos API |
| Scope | ์ ๊ทผ ๊ฐ๋ฅํ ๋ฒ์ (read/write ๋ฑ) | read:user, photos:read |

| ํ ํฐ ์ข ๋ฅ | ์ญํ | ์ ํจ๊ธฐ๊ฐ | ๋น๊ณ |
|---|---|---|---|
| Access Token | ์ค์ API ํธ์ถ ๊ถํ | ์งง์ (์๋ถ~์์๊ฐ) | ์์ฒญ๋ง๋ค ํฌํจ |
| Refresh Token | Access Token ์ฌ๋ฐ๊ธ์ฉ | ๊น (์์ผ~์๊ฐ์) | ๋ธ๋ผ์ฐ์ ยท์ฑ์ ์์ ํ ๋ณด๊ด |
| ID Token (OIDC) | ์ฌ์ฉ์ ์ ๋ณด(JWT) ํฌํจ | ์งง์ | ์ธ์ฆ์ฉ (OpenID Connect ํ์ฅ) |
Access Token์ โ์ถ์ ์ฆโ, Refresh Token์ โ์ฌ๋ฐ๊ธ๊ถโ,
ID Token์ โ์ ๋ถ์ฆโ์ ๋น์ ํ ์ ์๋ค.
OAuth2๋ ๋ค์ํ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ค์ฏ ๊ฐ์ง Grant Type์ ์ ์ํ๋ค.
์ด ์ค ํ์ฌ๋ 3๊ฐ์ง๋ง ํ์ค์ผ๋ก ์ ์ง๋๋ค.
| Grant Type | ์ฌ์ฉ ์์ | ์ฌ์ฉ์ ์ฐธ์ฌ | ์ํ | ์ค๋ช |
|---|---|---|---|---|
| Authorization Code + PKCE | SPA, ์น, ๋ชจ๋ฐ์ผ | ์์ | โ ์ ์ง | ๊ฐ์ฅ ์์ ํ ๊ธฐ๋ณธ ํ๋ฆ |
| Client Credentials | ์๋ฒ ๊ฐ ํต์ | ์์ | โ ์ ์ง | ๋ฐฑ์๋-๋ฐฑ์๋ ํต์ ์ฉ |
| Refresh Token | Access Token ๊ฐฑ์ | ์์ | โ ์ ์ง | ์ธ์ ์ง์์ฉ |
| Implicit | ๊ตฌ๋ฒ์ SPA | ์์ | โ ํ๊ธฐ ์์ | ํ ํฐ ๋ ธ์ถ ์ํ |
| Password Grant | ๋ด๋ถ ๋จ์ผ ์์คํ | ์์ | โ ํ๊ธฐ ์์ | ๋น๋ฐ๋ฒํธ ์ง์ ๋ ธ์ถ |
์ต์ข
์ฌ์ฉ์๊ฐ ๊ด๋ จ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ OAuth2 ํ๋ฆ.

๐ก Access Token์ ์ธ์ฆ ์๋ฒ์ Resource ์๋ฒ๊ฐ ๋ณ๊ฐ์ฌ๋
JWT ์๋ช ๊ฒ์ฆ์ผ๋ก ์ ๋ขฐํ ์ ์๋ค. (๊ณต๊ฐํค ๊ฒ์ฆ)
SPA๋ ๋ชจ๋ฐ์ผ ์ฑ์ฒ๋ผ client_secret์ ์์ ํ๊ฒ ์ ์ฅํ ์ ์๋ ํ๊ฒฝ์ ์ํ ๊ฐ์ ๋ ํ๋ฆ.
| ์ฉ์ด | ์ค๋ช |
|---|---|
| Code Verifier | ํด๋ผ์ด์ธํธ๊ฐ ์์ฑํ๋ ๋๋ค ๋ฌธ์์ด |
| Code Challenge | Verifier์ SHA256 ํด์ |
| Code Challenge Method | ํด์ ์๊ณ ๋ฆฌ์ฆ (S256 ๋ฑ) |

๐ฏ ํต์ฌ: Code Challenge๋ฅผ ํ์ทจํด๋ Code Verifier๋ฅผ ์ ์ ์์ด,
์ ์์ ํด๋ผ์ด์ธํธ๊ฐ ํ ํฐ์ ์ป์ง ๋ชปํจ.
๋ ์๋ฒ(๋ฐฑ์๋ ๊ฐ ํต์ ) ๊ฐ์ ์ธ์ฆ์ ์ํด ์ฌ์ฉ.
์ฌ์ฉ์ ์์ด ํด๋ผ์ด์ธํธ ID/Secret์ผ๋ก ํ ํฐ์ ์์ฒญํ๋ค.

๐งฑ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ํต์ ์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
Access Token์ด ๋ง๋ฃ๋๋ฉด ํด๋ผ์ด์ธํธ๋ Refresh Token์ผ๋ก ์ ํ ํฐ์ ์์ฒญํ๋ค.

๐ Refresh Token๋ ์ ํจ๊ธฐ๊ฐ์ด ์์ผ๋ฉฐ,
โoffline_accessโ scope๋ฅผ ์ฃผ๋ฉด ๋ง๋ฃ๋์ง ์๊ฒ ์ค์ ๊ฐ๋ฅ (๋น๊ถ์ฅ).
| ๊ฒ์ฆ ๋ฐฉ์ | ์ค๋ช | ์ฅ์ | ๋จ์ |
|---|---|---|---|
| Remote Introspection | Resource Server โ Auth Server /introspect ํธ์ถ | ์ค์๊ฐ ํ ํฐ ํ๊ธฐ ๊ฐ๋ฅ | ๋คํธ์ํฌ ์ง์ฐ ๋ฐ์ |
| Local Verification (JWT + JWKS) | Resource Server๊ฐ ๊ณต๊ฐํค๋ก ์์ฒด ๊ฒ์ฆ | ๋น ๋ฅด๊ณ ๋ ๋ฆฝ์ | ํ ํฐ ์ฆ์ ํ๊ธฐ ๋ถ๊ฐ |

๐ก ๋๋ถ๋ถ์ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์๋ JWT + JWKS ๊ฒ์ฆ ๋ฐฉ์์ ์ฑํํ๋ค.
OAuth2 ์์ ์๊ฒ ๋ง์์์ง ์ธ์ฆ ํ๋กํ ์ฝ ๋ ์ด์ด.
OAuth2๊ฐ โ์ธ๊ฐโ๋ฅผ ๋ด๋นํ๋ค๋ฉด, OIDC๋ โ๋๊ฐ ๋ก๊ทธ์ธํ๋๊ฐโ๋ฅผ ํ์คํํ๋ค.
| ๋น๊ต ํญ๋ชฉ | OAuth2 | OpenID Connect |
|---|---|---|
| ๋ชฉ์ | ์ธ๊ฐ (Authorization) | ์ธ์ฆ (Authentication) |
| ํต์ฌ ํ ํฐ | Access Token | ID Token (JWT) |
| Scope | read, photos, email ๋ฑ | openid, profile, email ๋ฑ |
| ํ์ค API | - | /userinfo |
| ์ฃผ์ ์ฌ์ฉ์ฒ | API ์ ๊ทผ ๊ถํ | ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์๋ณ |

โ OIDC๋ openid ์ค์ฝํ๊ฐ ์ถ๊ฐ๋ OAuth2 ์์ฒญ์ผ ๋ฟ์ด๋ค.
์ฆ, โAuthorization Code Flow + openid scopeโ = OIDC.
JWT ํ์์ผ๋ก ๋ฐ๊ธ๋๋ฉฐ, ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
{
"sub": "112233",
"name": "Eazy Bytes",
"email": "tutor@eazybytes.com",
"aud": "client_app_123",
"iss": "https://accounts.google.com",
"iat": 1714200000,
"exp": 1714203600
}

| ํ์ต ํญ๋ชฉ | ์์ฝ |
|---|---|
| OAuth2 ํต์ฌ ๋ชฉ์ | ์ธ์ฆ์ด ์๋ ์ธ๊ฐ(Authorization) ํ์ค |
| ์ธ์ฆ ํ์ฅ | OpenID Connect๊ฐ Authentication ๊ณ์ธต์ ์ ๊ณต |
| ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก | PKCE + ์งง์ ๋ง๋ฃ ํ ํฐ + HTTPS |
| ๊ฒ์ฆ ์ ๋ต | JWT + JWKS ๊ณต๊ฐํค ๊ฒ์ฆ ๋ฐฉ์ |
| ์กฐ์ง ๋ด ๊ตฌ์ฑ | Auth Server โ Resource Server ๋ถ๋ฆฌ ๊ตฌ์กฐ |