๋ค์ด๊ฐ๋ฉฐ
OAuth๋ 2007๋
Twitter์์ ์ฒ์ ์ ์๋ ํ์ค์
๋๋ค. ๋น์ ์๊ตฌ์ฌํญ์ โ์ 3์ ์ฑ์ด ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์์ง ์๊ณ , ๋์ ์ฌ์ฉ์๋ฅผ ๋์ ํด ํธ์์ ์ฌ๋ฆด ์ ์๊ฒ ํ๋ ๊ฒโ์ด์์ต๋๋ค.
์๋ฅผ ๋ค์ด, YNAB(๊ฐ๊ณ๋ถ ์ฑ)์ด Chase ์ํ ๊ณ์ข์ ์ฐ๊ฒฐ๋์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด, YNAB์ด Chase ๋น๋ฐ๋ฒํธ๋ฅผ ์์์๋ ์ ๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด OAuth๊ฐ ํ์ํ์ต๋๋ค.
โ ๋์ ๋ฐฉ์: ๋น๋ฐ๋ฒํธ๋ฅผ ์ 3์์๊ฒ ์ ๊ณต
- ์ฌ์ฉ์๊ฐ โํธ์ํฐ ๋ก๊ทธ์ธโ ์ฐฝ์ ์์ด๋์ ๋น๋ฒ์ ์
๋ ฅํ๋ฉด, ์ฌ์ค์ ๊ทธ ์ ๋ณด๋ ์ 3์ ์ฑ์ผ๋ก ์ ๋ฌ๋จ.
- ์ํํ ์ด์ :
- ์ฑ์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ์ง ์์ผ๋ฉด ์ ์ถ ์ํ.
- ์ฌ์ฉ์๋ ์ด๋๊น์ง ๊ถํ์ด ์ฐ์ด๋์ง ์ ์ ์์.
โ
์ข์ ๋ฐฉ์: OAuth ํ ํฐ
- ํต์ฌ ๊ฐ๋
: ์ก์ธ์ค ํ ํฐ(access token)
- ์ก์ธ์ค ํ ํฐ์ โํน์ ์ฌ์ฉ์โ๋ฅผ ์ํ ์ผํ์ฉ API ํค์ ๊ฐ์.
- ์ฑ์ ์ด ํ ํฐ์ ๋ฐ์ ํ์ฉ๋ ๋ฒ์(scope) ๋ด์์๋ง ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์์.
๐ OAuth ํ๋ฆ (์ฌ์ฉ์ ๊ด์ )
- YNAB์์ Chase ์ฐ๊ฒฐ ๋ฒํผ ํด๋ฆญ.
- YNAB์ Chase๋ก ๋ฆฌ๋ค์ด๋ ํธ.
- Chase ๋ก๊ทธ์ธ โ YNAB์ด ์ด๋ค ๊ถํ์ ์์ฒญํ๋์ง ํ์ธ (์: ํน์ ๊ณ์ข read-only).
- ๋์ํ๋ฉด ๋ค์ YNAB์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ.
- YNAB์ Chase๋ก๋ถํฐ ์ก์ธ์ค ํ ํฐ์ ์ป๊ณ , ์ดํ Chase ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ.
๐ ๋ณด์ ํฌ์ธํธ
- ์ก์ธ์ค ํ ํฐ์ URL์ ์ง์ ๋ด์ ๋ฆฌ๋ค์ด๋ ํธํ๋ ๊ฑด ๊ธ์ง!
โ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ก์ด๋ ์๋ฒ ๋ก๊ทธ์ ๋จ์ ์ ์ถ๋ ์ ์์.
- ๋์ Authorization Code๋ฅผ ๋ฐ๊ธํ๊ณ ,
- ํด๋ผ์ด์ธํธ ์ฑ์ ์ด ์ฝ๋๋ฅผ ๋ฐฑ์๋ POST ์์ฒญ(HTTPS) ์ผ๋ก ๊ตํ.
- ์ด๋ Client Secret๋ ํจ๊ป ์ ์กํ์ฌ ํฉ๋ฒ์ ์ธ ์์ฒญ์ธ์ง ๊ฒ์ฆ.
- ์ต์ข
์ ์ผ๋ก ์ก์ธ์ค ํ ํฐ์ ์์ ํ๊ฒ ๋ฐ๊ธ๋ฐ์.
๐งฉ OAuth ์ฉ์ด ์ ๋ฆฌ
- Resource Owner โ ์ฌ์ฉ์
- Client โ OAuth ์ฑ (์: YNAB)
- Authorization Server โ ๋ก๊ทธ์ธ/๊ถํ ๋์ ๋ด๋น ์๋ฒ (์: Chase ์ธ์ฆ ์๋ฒ)
- Resource Server โ ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ ์๋ฒ (์: Chase API ์๋ฒ)
- Scope โ ๊ถํ์ ๋ฒ์ (์: โchecking ๊ณ์ข ์กฐํโ)
โ๏ธ ์ฑ ๋ฑ๋ก ๊ณผ์
OAuth๋ฅผ ์ฐ๋ ค๋ฉด ์ฑ์ ์ฌ์ ์ ๋ฑ๋กํด์ผ ํจ.
- ๋ฑ๋ก ์ ํ์ํ ์ ๋ณด:
- ์ฑ ์ด๋ฆ (์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง)
- Redirect URI (๊ถํ ๋์ ํ ์ฌ์ฉ์๊ฐ ๋์๊ฐ ๊ณณ)
- ๋ฐ๊ธ๋๋ ๊ฐ:
- Client ID: ๊ณต๊ฐ ์๋ณ์
- Client Secret: ๋น๋ฐ ํค (๋ฐฑ์๋์์๋ง ์ฌ์ฉ)
๐ฐ๏ธ Front-channel vs Back-channel
- Front-channel: URL ํ๋ผ๋ฏธํฐ์ ๋ฐ์ดํฐ๊ฐ ๋
ธ์ถ๋จ (GET) โ ๋๊ตฌ๋ ๋ณผ ์ ์์.
- Back-channel: HTTPS POST ์์ฒญ์ผ๋ก ์ ๋ฌ๋จ โ ์์ .
- ๋ฐ๋ผ์ ์ค์ํ ๊ตํ(์ฝ๋โํ ํฐ)์ ๋ฐ๋์ Back-channel์์ ์ํ.
๐ PKCE (Proof Key for Code Exchange)
- ๋ชจ๋ฐ์ผ ์ฑ์ด๋ ๋ฐฑ์๋ ์๋ ์ฑ์ Client Secret์ ์จ๊ธธ ์ ์์.
- ์ด ๊ฒฝ์ฐ PKCE๋ผ๋ ์ถ๊ฐ ๋ฉ์ปค๋์ฆ์ ํ์ฉ โ ๋น๋ฐ ํค ์์ด๋ ์์ ํ๊ฒ ์ฝ๋ ๊ตํ ๊ฐ๋ฅ.
- ํ์ฌ๋ ํ์ค ํ๋ก์ฐ์์๋ PKCE ์ฌ์ฉ์ ๊ถ์ฅ.
๐ ํ ํฐ ๊ฐฑ์ & OIDC
- ํ ํฐ ๋ง๋ฃ โ Refresh Token์ผ๋ก ์ ์ก์ธ์ค ํ ํฐ ๋ฐ๊ธ.
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ โ OAuth ์์ OpenID Connect (OIDC) ๊ณ์ธต์ ์น์ด ์ฌ์ฉ์ ํ๋กํ ๋ฐ์ดํฐ๋ ํจ๊ป ์ ๊ณต (โ๊ตฌ๊ธ ๋ก๊ทธ์ธโ ๊ฐ์ ๊ธฐ๋ฅ).
โจ ๋ง๋ฌด๋ฆฌ
OAuth๋ ๋ณต์กํด ๋ณด์ด์ง๋ง ํต์ฌ์ ๊ฐ๋จํฉ๋๋ค:
- ๋น๋ฐ๋ฒํธ๋ ์ 3์์๊ฒ ์ฃผ์ง ์๋๋ค.
- ๋์ ์ 3์์๊ฒ๋ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธํ๋ค.
- ์ฌ์ฉ์๋ ์ธ์ ๋ ์ด๋ค ๊ถํ์ ์ฃผ๋์ง ๋์ํ๋ค.
๐ ์ด ์ธ ๊ฐ์ง ์์น์ ๊ธฐ์ตํ๋ฉด OAuth์ ๋ค์ํ ํ๋ก์ฐ์ ์ฉ์ด๋ ์ดํดํ๊ธฐ ์ฌ์์ง๋๋ค.
์๋ฌธ - https://www.ducktyped.org/p/an-illustrated-guide-to-oauth