OAuth2๋?
ํน์ ์ ํ๋ฆฌ์ผ์ด์ (Client)์์ ์ฌ์ฉ์์ ์ธ์ฆ์ ์ง์ ์ฒ๋ฆฌํ์ง ์๊ณ , ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ณด์ ํ๊ณ ์๋ ์ ๋ขฐํ ๋งํ ์จ๋ํํฐ ์ ํ๋ฆฌ์ผ์ด์ (Github, Kakao, Google, Facebook ๋ฑ)์์ ์ฌ์ฉ์์ ์ธ์ฆ์ ๋์ ์ฒ๋ฆฌํ๊ณ ๋ฆฌ์์ค์ ๋ํ ์๊ฒฉ์ฆ๋ช ์ฉ ํ ํฐ์ ๋ฐ๊ธํ์ฌ, ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ํ ํฐ์ ์ด์ฉํ์ฌ ์จ๋ํํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ฒ ํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
๋๋ ์ถ๊ฐ์ ์ธ ์ธ์ฆ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉํ๋ค. ์ผ๋ฐ์ ์ธ ์์ด๋/ํจ์ค์๋ ๋ก๊ทธ์ธ์ ์ถ๊ฐ์ ์ผ๋ก OAuth2๋ฅผ ์ด์ฉํ์ฌ ์ธ์ฆ์ ์งํํ๋ ๊ฒ์ด๋ค. ํน์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์ ํฌ๋ฆฌ๋ด์ ์ ๋จ๊ธฐ๊ณ ์ถ์ง ์์๊ฒฝ์ฐ OAuth2 ๋ก๊ทธ์ธ ์ธ์ฆ๋ฐฉ๋ฒ์ผ๋ก ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ฉด๋๋ค.
1. Resource Owner๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ OAuth2 ์ธ์ฆ์ ์์ฒญํ๋ค. ์ฌ๊ธฐ์์ ๋ก๊ทธ์ธ์ Resource Owner๊ฐ ์จ๋ํํฐ ์ ํ๋ฆฌ์ผ์ด์ [์ฌ๊ธฐ์ ๊ตฌ๊ธ]์ ๋ก๊ทธ์ธ ํ๊ธฐ๋ฅผ ์ํ๋ ๊ฒ์ด๋ค.(Client์์ ์ ๊ณตํ๋ ๋ก๊ทธ์ธ์ด ์๋)
2. Client๋ Resource Owner๊ฐ ์จ๋ํํฐ์ ํ๋ฆฌ์ผ์ด์ [์ฌ๊ธฐ์ ๊ตฌ๊ธ] ์ ๋ก๊ทธ์ธํ ์์๋๋ก ์จ๋ํํฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก redirect ํด์ค๋ค.
3. Resource Owner๋ ๋ก๊ทธ์ธ ์ธ์ฆ์ ์งํํ๊ณ , ์ธ์ฆ์ ์ฑ๊ณต์ ํ๊ฒ ๋๋ฉด 4๋ฒ์ผ๋ก ๋์ด๊ฐ๋ค.
4. Authorization Server๊ฐ Resource Owner์ ๋ก๊ทธ์ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋์์์ ์ฆ๋ช ํ๋ Aceess Token์ Client์๊ฒ ์ ์กํ๋ค.
5. Access Token์ ์ ๋ฌ๋ฐ์ Client๋ Resource Owner์ ๋๋ฆฌ์ธ ์ญํ ์ด ๊ฐ๋ฅํด์ง๊ณ , Resource Server์๊ฒ Resource Owner ์์ ์ Resource๋ฅผ ์์ฒญํ๋ค.
6. Resource Server ๋ Client๊ฐ ์ ์กํ Access Token์ ๊ฒ์ฆํด์ Client๊ฐ Resource Owner์ ๋๋ฆฌ์ธ์ผ๋ก์จ์ ์๊ฒฉ์ด ์ฆ๋ฉด๋๋ฉด Resource๋ฅผ Client์๊ฒ ์ ์กํ๋ค.
Authorization Grant
Client ์ ํ๋ฆฌ์ผ์ด์ ์ด Access Token์ ์ป๊ธฐ ์ํ Resource Owner์ ๊ถํ์ ํํํ๋ ํฌ๋ฆฌ๋ด์ ์ ์๋ฏธํ๋ค. ์ฆ, Client๊ฐ Access Token์ ์ป๊ธฐ ์ํ ์๋จ์ด๋ผ๊ณ ์๊ฐํ๋ฉฐ ๋๊ณ , ๋ค๊ฐ์ง ์ข ๋ฅ์ Authorization Grant๊ฐ ์๋ค.
์ถ๊ฐ) Scope : ์ฃผ์ด์ง Access Token์ ์ฌ์ฉํ์ฌ ์์ธ์ค ํ ์์๋ Resource์ ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค.
Authorization Code Grant : ๊ถํ ๋ถ์ฌ ์น์ธ ์ฝ๋ ๋ฐฉ์
๊ฐ์ฅ ๋ง์ด์ฐ์ด๊ณ ๊ธฐ๋ณธ์ด ๋๋ ๋ฐฉ์์ผ๋ก Refresh Token ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๊ถํ๋ถ์ฌ ์์ฒญ์์ ์๋ตํ์ ์ code๋ก ์ง์ ํ์ฌ ์์ฒญํ๋ค.
Implicit Grant : ์๋ฌต์ ์น์ธ ๋ฐฉ์
๋ณ๋์ code์์ด ๋ฐ๋ก Access Token์ ๋ฐ๊ธํ๋ ๋ฐฉ์์ด๋ค.
Refresh Token์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ ์๋ต ํ์ ์ token์ผ๋ก ์ง์ ํ์ฌ ์์ฒญํ๋ค.
Resource Owner Password Credential Grant : ์์ ์์ ์ ์๊ฒฉ ์ฆ๋ช ์น์ธ ๋ฐฉ์
๊ฐ๋จํ๊ฒ ๋ก๊ทธ์ธ์ ํ์ํ ์ ๋ณด๋ก Access Token์ ๋ฐ๊ธ๋ฐ๋ ๋ฐฉ์์ด๋ค. ์์ ์ ์๋น์ค์์ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ์ธ์ฆ๋ฐฉ์์ด๊ณ Refresh Token ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. (Authorization Server, Resource Server, Client๊ฐ ๊ฐ์ ์์คํ ์ผ๋)
๋ค์ด๋ฒ๊ณ์ -> ๋ค์ด๋ฒ ์นํฐ, ๋ค์ด๋ฒ ๋ด์ค ๋ฑ์ ๋ก๊ทธ์ธ ํ๋๊ฒฝ์ฐ