โ OAuth 2.0 ์ด๋?
-
๊ฐ์ข
์น์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ํ์ฌ์ API๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋, ์ธ์ฆ๊ณผ ๊ถํ์ ํ๋ํ๋ ํ๋กํ ์ฝ์ด๋ค.
-
๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด, ๋ก๊ทธ์ธ์์๋ถํฐ ๊ฐ์ข
API๋ฅผ ๋ณด๋ค ์์ ํ๊ณ ํธํ๊ฒ ์ฌ์ฉํ๊ฒ ํด์ค ์ ์๋ค.
-
OAuth 2.0์ OAuth 1.0์ ๋จ์ ์ ๋ณด์ํด์ ์
๋ฐ์ดํธ ๋ ๋ฒ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๐ข ์ฅ์ ์ด ๋ญ๋ฐ?
1) ์ด์ฉํ๋ ค๋ ์๋น์ค๋ง๋ค ํ์๊ฐ์
์ ํ ํ์ ์์ด ๊ธฐ์กด์ ์ฌ์ฉํ๋ ํ์ฌ์ ์ ๋ณด๋ฅผ ์ด์ฉํด์ ๋ก๊ทธ์ธ์ ์งํํ ์ ์๋ค๋ ์ ,
2) ์ ๋ณด๋ ํ์์ ๋ณด ๋ฟ๋ง ์๋๋ผ ๊ธฐํ API์ ๋ํ ์ ๋ณด์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ์
๊ทธ ์ค ๊ฐ์ฅ ๋ง์ด ์ด์ฉ๋๋ ๊ณณ์ด ๋ฐ๋ก ํ์ฌ์ ์ธ์ฆ๋ ํ์์ ๋ณด๋ฅผ ํตํ ๋ก๊ทธ์ธ์ด๋ค.
๐ Authentication (์ธ์ฆ) - ์ ์์ ํ์ธํ๋ ๊ฒ
- ์์ ์ด A๋ผ๊ณ ํ๋ ๊ฐ์ธ์ด ๊ณผ์ฐ ์ ๋ง๋ก A๊ฐ ๋ง๋๊ฑด์ง ์ ์์ ํ์ธํ๋ ํ์๋ฅผ ์๋ฏธํจ (์ธ์ฆ์ด ๋จ์ผ๋ก์จ ์ด๋ ํ ์ํ์ ๋ณํ๊ฐ ์๊ธฐ๋ ๊ฒ์ ์๋)
- ์ธ์ฆ์ ํจ์ผ๋ก์จ A๋ผ๋ ์ฌ๋์ ์ ์์ด ํ์ธ๋จ => A๊ฐ ์์ ํ ํน์ ์์์ ๋ํ ์ฃผ๊ถ์ ํ์ฌํ ์ ์๊ฒ ๋์ง๋ง, ์ด ์ฃผ๊ถ์ ์๋๋ถํฐ A๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ
- ๋ค์๋งํด, A๋ผ๋ ์ฌ๋์ ์ธ์ฆํจ์ผ๋ก์จ ์ด์ ์ ์๋ ์ฃผ๊ถ์ด ์๋ก ์๊ธฐ์ง๋ ์๋๋ค๋ ๋ป
๐ Authorization (์น์ธ) - ๊ถํ์ ํ์ธํ๋ ๊ฒ
- ์ธ์ฆ์ด ๋๊ธฐ ์ ๊ณผ ํ, ์ธ์ฆ์ ์ํํ ์ธก์ด๋ ์ธ์ฆ๋์์ ์ํ์๋ ์๋ฌด๋ฐ ๋ณํ๊ฐ ์์ (์ธ์ฆ ์ ์ ์๋ ์๊ฒฉ์ด ์ธ์ฆ ํ์ ์๊ธฐ์ง ์๋๋ค๋ ์๋ฏธ)
- BUT, Authorization(์น์ธ)์ ์ด์ ์ํ์ ๋ค๋ฅธ ์๋ก์ด ์ํ๊ฐ ๋จ. why? ์น์ธ ๋ฐ์ ๋์์ ์๋ก์ด ์๊ฒฉ์ด ์๊ธฐ๊ธฐ ๋๋ฌธ
๋๋..
์ฐ๋ฆฌ ํ๋ก์ ํธ ์๋น์ค์์ Oauth 2.0๊ณผ passport๋ฅผ ์ฌ์ฉํ๋ฉด์ ์์ง Oauth์ ๋ํ ๊ฐ๋
์ด ํ์คํ๊ฒ ์กํ์ง ์์ ๊ฒ ๊ฐ์ Oauth์ ๊ฐ๋
์ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด๋ฉด์ ์ ๋ฆฌํด๋ณด๊ธฐ๋ก ํ๋ค.
๐ Oauth 2.0์ 4๊ฐ์ง ๊ตฌ์ฑ
๐ป Client (pillnuts)
- ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ค๋ ์์ฉํ๋ก๊ทธ๋จ
- Client๊ฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๊ถํ์ ์์ฒญํ๋ฉด์ Oauth2์ ์ ์ฐจ์ ํ๋ฆ์ด ์์๋๊ณ , Client๊ฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฒ ๋๋ฉด ๋์ด ๋๋ค.
๐ป Resource Server (Google, Apple, Kakao)
- ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๊ณ ์๋ค๋ ์ญํ ๋ณด๋ค๋ ์ ๊ทผ ์์ฒญ์ ์ ํจ์ฑ์ ๋ถ๋ณํ์ฌ ์ ์ ๊ฐ ๋์ํ Client์๊ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ์ญํ ์
๐ป Authorization Server
-
User ๋ฐ์ดํฐ์ ์ ๊ทผํ ๊ถํ์ ์ ๊ณตํ๋ ์๋ฒ
-
Client์ ์ ๊ทผ ์์ฒญ์ ๋ฐ๋ผ, User์๊ฒ Client์ ๋ํ ๋ฑ๋ก๋ ์ ๋ณด ๋ฐ Client๊ฐ ์์ฒญํ ๋ฐ์ดํฐ ํญ๋ชฉ, ํ์ฉํ๋ ค๋ ๋ชฉ์ ๋ฐ ๊ธฐ๊ฐ ๋ฑ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ํ๊ณ , user์ ๋์ ์ฌ๋ถ๋ฅผ ๋ฌป๋ ์ญํ
-
์๊ท๋ชจ ์์คํ
์ผ ๊ฒฝ์ฐ, ํ๋์ ๊ฐ์ฒด๊ฐ Resource Server/ Authorization Server์ 2๊ฐ์ง ์ญํ ์ ์ํํ๋ ๊ฒฝ์ฐ๋ ์์ผ๋,
๊ท๋ชจ๊ฐ ํด์๋ก ๋ถ๋ฆฌํด์ ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
๐ปResource Owner (User)
- Oauth 2.0์ ์ต๊ณ ๊ถ๋ ฅ์
- Resource Server ์
์ฅ: ๋ฐ์ดํฐ ๋ณดํธ๋ฅผ ๋ถํํ ๊ณ ๊ฐ
- Client ์
์ฅ: ๊ฐ์น๋ฅผ ์ฐฝ์ถํ๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ์ ์ฃผ์ธ
- Resource Owner๋ ์์๋ก ์์ ์ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌ, ๊ฑฐ๋ถ ๋๋ ์ฒ ํํ ์ ์๋ ๋ฐ์ดํฐ์ ์ฃผ์ฒด์
- ์์ธ๋ฌ, ์ ์ ๋ ์ ๊ณตํ ๋ฐ์ดํฐ์ ๋ฒ์ ๋ฐ ๊ธฐ๊ฐ ๋ฑ์ ๋ํ ๊ฒฐ์ ๋ ๋ด๋ฆด ์ ์์
๐พ OAuth 2.0์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ
- Client์ ๋ฑ๋ก ์ ๋ณด
- Oauth 2.0์ด ์๋ํ๊ธฐ ์ํด Client๋ ์ฌ์ ์ Resource Server์ ๋ฑ๋กํด์ผ ํ๋ค.
- ์นํ์ด์ง ๊ฐ์ ๊ฒฝ์ฐ, ๋ฐ๋์ Redirect URI์ ๋ํ ์ ๋ณด๋ฅผ ๋ฑ๋กํด์ผํจ
- Redirect URI
- Resource Server๋ ์ ์ ๊ฐ Client์๊ฒ ๊ถํ ๋ถ์ฌํ๋ ๊ฒ์ ์ ์ ๊ฐ ๋์ ํ๋ฉด, ์ ์ ๋ฅผ Client์ ๋ฑ๋ก๋ Redirect URI๋ก ์ด๋(redirection) ์ํจ๋ค.
- ๋ง์ฝ ๋ฑ๋ก๋์ง ์์ Redirect URI๋ฅผ ๋ด์ ์์ฒญ์ ๋ฐ๊ฒ ๋๋ฉด ๊ทธ ์์ฒญ์ ๋ฌดํจ์ฒ๋ฆฌ๊ฐ ๋จ
- ๊ธฐ์กด์ ๋ฑ๋ก๋ Redirect URI์ ๋ฒ์ ํํด์ ์ ์ ๋ฅผ ์ฐ๊ฒฐ์ํด์ผ๋ก์จ ๋ฐฉ์งํ ์ ์๋ ๊ณต๊ฒฉ๋ค์ด ์๊ธฐ ๋๋ฌธ
- Client ID์ Client Secret
- ์๋ก ๋ฑ๋กํ ์ฑ์ Resource Server๋ก๋ถํฐ ClientId์ Client Secert์ ๋ฐ๊ธ๋ฐ๋๋ค.
- Client ID๋ ๊ณต๊ฐํ๋ ์ ๋ณด๋ก์ ๋ก๊ทธ์ธ ์นํ์ด์ง ๋๋ JS์ ํฌํจ๋ ์ ์๋ ์ ๋ณด์ด๋ค. ๋ฐ๋ฉด์, Client Secret์ ๋
ธ์ถ์ด ๋๋ฉด ์๋๋ ์ ๋ณด์ด๋ค. ๊ทธ๋์ Client Secret ๊ด๋ฆฌ๋ฅผ ์ ํด์ผํ๋ค.