OAuth๋?
๊ธฐํ ์๋ฆฌ์ฆ: Web Authentication
- Cookie & Session & JWT
- OAuth ๐
- OpenID Connect(OIDC)
- SSO
- SAML
์ด ๊ธ์ OAuth๋ฅผ ๊ณต๋ถํ๋ฉด์ ๊ฐ์ธ์ ์ผ๋ก ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ง์ ๊ณผ ์กฐ์ธ์ ์ธ์ ๋ ํ์์ ๋๋ค ใ ใ
OAuth 2.0
์ ๋ํ ์
๋ฌธ์ผ๋ก๋ ์ํ์ฝ๋ฉ์ WEB2 - OAuth 2.0 ๊ฐ์ข๋ฅผ ์ถ์ฒํฉ๋๋ค ๐
OAuth
๋ โ๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธโ, โํ์ด์ค๋ถ์ผ๋ก ๋ก๊ทธ์ธโ๊ณผ ๊ฐ์ ์ธ์ฆ(Authentication)์ ์ด์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ด๋ค! OAuth
๋ฅผ ์ฌ์ฉํ๋ฉด, ์ธ๋ถ์ ์จ๋ํํฐ ์๋น์ค์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฉด์, ๊ทธ๊ณณ์ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค!!
Motivation.
OAuth
๊ฐ ํ์ํ๊ฒ ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ โThird Party Application์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ๊ณ ์ถ์ง ์๋คโ์ด๋ค. ๋ง์ฝ ์์ด๋์ ๋น๋ฐ๋ฒํธ, ๋๋ ๊ฐ์ธ์ ๋ณด ๋ฑ์ ์ฌ๋ฌ ์ดํ๋ฆฌ์ผ์ด์
์ ์
๋ ฅํ๊ณ , ๊ทธ๊ณณ์ DB์ ์ ์ฅํ๋ค๋ฉด ํผ์ฑ๊ณผ ํดํน์ ๋๊ฐํด์ง๊ณ ๋ฌด์๋ณด๋ค ํด๋น ์ดํ๋ฆฌ์ผ์ด์
์ด ๋ณด์์ ์ผ๋ก ์์ ํ๋ค๋ ๋ณด์ฅ์ด ์๊ธฐ ๋๋ฌธ์ ํฐ ์ ์ฌ์ ์ํ์ด ์์๋ค ๐
์ด๋ฐ ๋ฌธ์ ์ํฉ์ ํด๊ฒฐํ๊ธฐ ์ํด 2007๋
, Twitter์ ์ฃผ๋๋ก OAuth 1.0
์ด ํ์ํ๋ค! ๐
OAuth 1.0
Image from here
OAuth 1.0
์ ์์ ๊ฐ์ ํ๋ก์ฐ๋ก ์ธ์ฆ์ ์งํํ๋ค. OAuth 1.0
์ ํ๋ก์ฐ์ ์ฐธ๊ฐํ๋ ๊ฐ ์ฃผ์ฒด๋ฅผ ์ดํด๋ณด๋ฉด,
1. User ๋๋ Resource Owner
ํน์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ฃผ์ฒด. ์ฌ๊ธฐ์๋ GitHub์ด ๊ทธ ํน์ ์๋น์ค์ด๋ค.
2. Consumer ๋๋ Client
ํน์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ฃผ์ฒด. OAuth ์ ๊ณต์์๊ฒ ์ธ์ฆ๊ณผ ๊ถํ์ ์์ฒญํ๋ค.
3. Service Provider / OAuth Provider ๋๋ Resource Server
OAuth ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ฃผ์ฒด.
๋ฐ์ค๋ก ํ์๋ ๋ถ๋ถ์ด OAuth
๊ณต์ ๋ฉ๋ด์ผ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋ค.
์ฅ์ .
- Consumer๊ฐ ID/PW ์์ด ์ธ์ฆ์ ์ํํ ์ ์์.
- Consumer๊ฐ ์ ๊ณตํ๋ API์ ์ ํ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ๊ถํ ์ ์ด๋ ๊ฐ๋ฅ
- User๊ฐ OAuth Provider์ ๊ด๋ฆฌ ํ์ด์ง์์ Consumer์ ๊ถํ์ ์ทจ์ํ ์๋ ์์.
- PW๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ธ์ฆ ํ ํฐ(access token)์ ๊ณ์ ์ ํจํจ*
* OAuth 1.0
์ ์ฅ์ ์ด์ ๋จ์
๋จ์ .
- ๊ตฌํ์ด ๋ณต์กํจ.
- ์น์์ ์ ์ฌ์ฉํ์ผ๋ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์ง์์ด ๋ถ์กฑ.
- ์ธ์ฆ ํ ํฐ(access token)์ด ๋ง๋ฃ๋์ง ์์.
OAuth 2.0
์์ refresh token์ ๋์ ํด ํด๊ฒฐํ๋ค!
OAuth 2.0
OAuth 1.0
์ ๋จ์ ์ ๋ณด์ํด 2012๋
, OAuth 2.0
์ด ๊ณต๊ฐ๋๋ค. OAuth 2.0
์ ๊ธฐ๋ฅ์ ๋จ์ํํ๊ณ , ํ์ฅ์ฑ(scalability)์ ๋ ๊ฐํํ๋ค๊ณ ํ๋ค.
OAuth 1.0
์ ๊ณต๊ฐ๋ ์ดํ์ ํ์ค์ผ๋ก ์ธ์ ๋ฐ์์ง๋ง, OAuth 2.0
์ ์ฒ์๋ถํฐ ํ์ค์ ์ผ๋ํด๋๊ณ ๊ฐ๋ฐํ๋ค๊ณ ํ๋ค. OAuth 2.0
๋ถํฐ https๊ฐ ํ์๊ฐ ๋์ด ํ ํฐ ์ ์ก์ ๋ํ ๋ณด์์ด ๊ฐํ๋์๋ค.
Image from ํ์ด์ฝ ๊ฐ๋ฐ์์ผํฐ
ํ์ด์ฝ์ ์ค์ OAuth 2.0
์ ํ๋ก์ธ์ค๋ค. ์ํ์ฝ๋ฉ์ WEB2 - OAuth 2.0 ๊ฐ์ข์์ ์ค๋ช
ํ๋ OAuth ํ๋ก์ฐ๋ฅผ ์ดํดํ๋ค๋ฉด, ์์ ๊ณผ์ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค ๐
Access Token & Refresh Token
OAuth 2.0
์ access_token
, refresh_token
๋ ๊ฐ์ง ํ ํฐ์ ์ฌ์ฉํด ๋์ํ๋ค.
Access Token.
Client๊ฐ Resource Server์ ์ ์ ์ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋, ๊ถํ์ ํ์ธํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋๋ ํ ํฐ์ด๋ค. OAuth 2.0
์ 4๊ฐ์ง ๊ถํ ์์ฒญ ๋ฐฉ์ ๋ชจ๋ ์์ฒญ ์ ์ฐจ๋ฅผ ์ ์์ ์ผ๋ก ๋ง์น๋ฉด ์ด access_token
์ ๋ฐ๊ธ๋ฐ๊ฒ ๋๋ค. Client๋ Resource Server์ API๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๋, ๋ฐ๋์ ์ด access_token
์ ํค๋๋ URI Parameter์ ์ฒจ๋ถํด์ผ ํ๋ค.
Refresh Token.
access_token
์ ์ฌ์ฉํ ์ ์๋ ์๊ฐ์ด ์ ํ๋์ด ์๋ค. ๋ง์ฝ access_token
์ด ๋ง๋ฃ๋์ด Client๊ฐ Resource Server์ API๋ฅผ ์ ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค๋ฉด, Client๋ ์ด refresh_token
์ Resource Server์ ๋ณด๋ด access_token
์ ๊ฐฑ์ ์ ์์ฒญํ๋ค. Server๋ refresh_token
์ด ์ ํจํ๋ค๋ฉด, ์๋ก์ด access_token
์ ๋ฐ๊ธํด Client์๊ฒ ์ ๋ฌํ๋ค.
Authentication Methods
OAuth 2.0
์์๋ 4๊ฐ์ง ์ ๋ณด์ ์ธ์ฆ ๋ฐฉ์์ ์ง์ํ๋ค. ๊ฐ๊ฐ์ access_token
์ ์ป๋ ๋ฐฉ์์ ๋ฐ๋ผ ๋ถ๋ฅ๋๋ค.
- Authorization Code Grant ๐ฅ
- Implicit Grant
- Resource Owner Password Credentials Grant
- Client Credentials Grant
์ํ์ฝ๋ฉ ๊ฐ์ข์์ ๋ค๋ฃฌ ๋ฐฉ์์ด โAuthorization Code Grantโ ๋ฐฉ์์ด๋ค. ํ์ด์ฝ์ OAuth 2.0 ํ๋ก์ฐ ์ญ์ โAuthorization Code Grantโ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค.
๋งบ์๋ง
OAuth 2.0
๋ฅผ ํ์ฅํ ํ๋กํ ์ฝ์ด ๋ฐ๋ก OpenID Connect
๋ผ๊ณ ํ๋ค. ๋ค์ ํฌ์คํธ์์๋ ์ด OpenID Connect
์ ๋ํด ์ดํด๋ณด๊ฒ ๋ค ๐