OAuth ๋? OAuth ๊ฐ๋ ๋ฐ ๋์์๋ฆฌ(feat. ์ํ์ฝ๋ฉ)
OAuth๋ ์ด๋ค ์์คํ
์์ ๊ทธ ์์คํ
์ ์ฌ์ฉ์๋ค์ด Google, Facebook, KaKao talk๊ณผ ๊ฐ์ ์๋น์ค์ ์ง์ ์ฐ๊ฒฐํ์ง ์๊ณ ๋ ์์คํ
์ ํตํด ๊ฐ ์๋น์ค(Google,Facebook๋ฑ) ์ ๊ธฐ๋ฅ์ ์ด์ฉํ๊ณ ์ถ์ ์๊ตฌ๋ก ์ธํด ๋ฑ์ฅํ ๊ฐ๋
์ด๋ค.
์ด ๋ ์์คํ ์ด ์ฌ์ฉ์๋ค์ ์๋น์ค ๊ณ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค๋ฉด ํด๋น ๋ฌธ์ ๊ฐ ์ฝ๊ฒ ํด๊ฒฐ ๋๊ฒ ์ง๋ง, ๊ทธ๊ฒ์ ๋ณด์ ์ ๋งค์ฐ ์ทจ์ฝํ ๋ฐฉ๋ฒ์ด๋ค. ์๋ํ๋ฉด,
-
์ฌ์ฉ์ ์ ์ฅ์์๋ ์ฒ์ ๋ณด๋ ์์คํ ์ ์์ ์ ์นด์นด์ค ๊ณ์ ์ ๋ณด๋ฅผ ๋งก๊ฒจ์ผ ๋๋ ๊ฒ์ด๊ณ ,
-
์์คํ ์ ์ฅ์์๋ ์ฌ์ฉ์๋ค์ ์นด์นด์ค ๊ณ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ ์์ฒด๊ฐ ๋ถ๋ด์ด๋ค.
-
์๋น์ค ์ ์ฅ์์๋ ์์ ๋ค์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ๋ขฐํ ์ ์๋ โ์์คํ โ์๊ฒ ๋งก๊ธฐ๋ ๊ฒ์ ๋ง๋ ์๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ์๊ฒ OAuth๊ฐ ํ์ํ๋ค.โ
OAuth์๋ ์์ ๋งํ ๊ฒ์ฒ๋ผ ์ฌ์ฉ์, ์์คํ , ์๋น์ค 3๊ฐ์ง์ ์ฃผ์ฒด๊ฐ ์๊ณ ,
OAuth์์๋ ์ด๋ฅผ ๊ฐ๊ฐ Resource owner(์ฌ์ฉ์), Client(์์คํ ), Resource server(์๋น์ค) ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ์๊ฐ ์๋ โ์์คํ โ ์์ ์ ์ํ์.
1. OAuth ๋ฑ๋ก
๊ฐ์ฅ ๋จผ์ ํด๋ผ์ด์ธํธ๊ฐ ๋จผ์ ๋ฆฌ์์ค์๋ฒ๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ์ฌ์ ์ ์น์ธ์ ์ป์ด๋์ด์ผ ํ๋ค.
์ด ์ธ ๊ฐ์ง๋ฅผ ๋ฆฌ์์ค์๋ฒ๋ ๊ณตํต์ ์ผ๋ก ๋ฐ๋๋ค.
-
client id : app ์๋ณ์
-
client secret : ๋น๋ฐ๋ฒํธ
-
authorized redirect url
: ๋ฆฌ์์ค์๋ฒ๊ฐ ๊ถํ ๋ถ์ฌํด์ฃผ๋ ๊ณผ์ ์์ authorized code๋ฅผ ์ ๋ฌํด์ฃผ๋๋ฐ ๊ทธ๊ฑธ ์ ๋ฌ๋ฐ๊ณ ์ถ์ ๊ฒฝ๋ก๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค. ex) https://onyou.com/callback
2. ๋ฆฌ์์ค ์ค๋์ ์น์ธ
๊ฐ๋ น ๋ฆฌ์์ค ์ค๋(์ฌ์ฉ์) ๊ฐ ์ฑ์์ โ์นด์นด์ค๋ก ๋ก๊ทธ์ธํ๊ธฐโ ๋ฒํผ์ ๋๋ ์ ๋,
์ด๋ฐ ์์ผ๋ก ๋ฆฌ์์ค ์ค๋๊ฐ ๋ฆฌ์์ค ์๋ฒ์๊ฒ client id, scope, redirect_url๊ฐ ํฌํจ๋ url๋ก ํธ์ถํ๊ฒ ๋๋ค.
์ฌ๊ธฐ์ scope์ด๋ ๋ฆฌ์์ค ์๋ฒ์ ์ด๋ค ๊ธฐ๋ฅ์ ์ธ ๊ฒ์ธ์ง(ex. sns ๊ธ์ฐ๊ธฐ, ๊ตฌ๊ธ ์บ๋ฆฐ๋ ๋ฑ) ์ ๋ํ ๋ด์ฉ์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
โ
- ๋ฆฌ์์ค ์๋ฒ(์นด์นด์ค ์๋ฒ)๋ ํด๋น ๋ฆฌ์์ค ์ค๋๊ฐ ๋ก๊ทธ์ธ์ด ๋ ์ํ์ธ์ง ์๋์ง๋ฅผ ํ์ธ ํ๊ณ , ๋ก๊ทธ์ธ ํ์ง ์์ ์ํ์ด๋ฉด ๋ก๊ทธ์ธ ํ๋ฉด์ ๋์์ค๋ค.
โ
- ์นด์นด์ค ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ฉด, ๊ทธ์ ์์ผ ๋ฆฌ์์ค ์๋ฒ๋ url์์ ์์ฒญํ client_id๊ฐ์ด ์กด์ฌํ๋ ์ง๋ฅผ ํ์ธํ๊ณ ,
ํด๋น client_id๊ฐ์ ๋์ํ๋ redirect url์ด ์ ํํ ์์ฒญ๋์๋์ง๋ฅผ ํ์ธํ๋ค. ๋ค๋ฅด๋ฉด ์ฌ๊ธฐ์ ์์ ์ด ๋๋๊ณ ,
๊ฐ๋ค๋ฉด ์ด๋ค scope์ ์ด๋ค ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๊ณ ์์ผ๋ ํ์ฉํ ๊ฒ์ธ์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฌป๋๋ค.
- ํ์ฉํ๊ณ ๋๋ฉด ๋ฆฌ์์ค ์๋ฒ๋ ์๋์ ๊ฐ์ด ์ด๋ค ํด๋ผ์ด์ธํธ์์ ์ด๋ค ๋ฆฌ์์ค ์ค๋๊ฐ ์ด๋ค scope์ ํ์ฉํ๋ ์ง์ ๋ํ ์ ๋ณด๋ฅผ ์๋์ ๊ฐ์ด ์ ์ฅํ๊ณ ์๊ฒ ๋๋ค.
3. ๋ฆฌ์์ค ์๋ฒ์ ์น์ธ
- ์ ๋ณด์ ์ ์ฅ๊ณผ ๋์์ ๋ฆฌ์์ค ์๋ฒ๋ ๋ฆฌ์์ค ์ค๋๊ฐ ์น์ธํ๊ฒ ๋๋ฉด redirect url๋ก auth code ๊ฐ์ ์ ๋ฌํ๊ฒ ๋๋ค.
- ๊ทธ๋ฌ๋ฉด redirect url์ ํตํด ํด๋ผ์ด์ธํธ๋ฅผ ํธ์ถํ๊ฒ ๋๊ณ ํด๋ผ์ด์ธํธ๋ auth code ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๋ฐ์์จ auth code ๊ฐ, client secret, redirect url, client_id ๋ฑ์ ์ ๋ณด๋ฅผ ๋ฆฌ์์ค ์๋ฒ์๊ฒ ๋ณด๋ด๊ฒ ๋๊ณ ,
4. accessToken ๋ฐ๊ธ
๋ฆฌ์์ค ์๋ฒ๋ ๋ชจ๋ ์ ๋ณด๊ฐ ์ผ์นํ๋ ์ง ํ์ธ ํ ๋๋์ด! accessToken์ ๋ฐ๊ธํ๋ค.
์ด accessToken์ ์ด์ฉํด ๋ฆฌ์์ค ์๋ฒ๋ ์ด๋ค ํด๋ผ์ด์ธํธ์ ์ด๋ค ์ ์ ๊ฐ ์ด๋ค scope์ ์ฌ์ฉํ ๊ฒ์ธ์ง์ ๋ํ ๊ฒ์ ์ ์ ์๋ค.
5. RefreshToken
accessToken์ ์๋ช ์ด ์๊ธฐ ๋๋ฌธ์ ์๋ช ์ด ๋ค ํ์ ๋ API๋ฅผ ํธ์ถํด๋ API๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ง ์๋๋ค.
๊ทธ๋ฌ๋ฉด accessToken์ ๋ค์ ๋ฐ๊ธ ๋ฐ์ ๋ ์์ ๋ชจ๋ ๊ณผ์ ์ ๋ค์ ๊ฑฐ์น ์๋ ์์ผ๋ฏ๋ก OAuth์์๋ refreshToken์ด๋ ๊ฒ์ ํ์ฉํ๋ค.
OAuth ํ์ค์์ ์ ๊ณตํ๋ ํ๋ก์ธ์ค๋ ์๋์ ๊ฐ์๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ธฐ accessToken์ ๋ฐ๊ธํ ๋ RefreshToken์ ํจ๊ป ๋ฐ๊ธํ๊ณ , ์ค๊ฐ์ accessToken์ด invalid๋๊ฒ ๋๋ฉด ํด๋ผ์ด์ธํธ์์ refreshToken์ ๋ฆฌ์์ค์๋ฒ์๊ฒ ๋ณด๋ด์(์ ํํ๋ Auth์๋ฒ) accessToken์ ์ฌ ๋ฐ๊ธํ๋ ํ์์ด๋ค.
์ฆ, accessToken์ ๊ณ์ ๊ฐฑ์ ๋์ง๋ง refreshToken์ ์ด๊ธฐ์ ๋ฐ์ ๊ฒ์ ๊ณ์ refreshํ์ํ ๋๋ง๋ค ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๊ณ ๋๋ก๋ ์๋ก์ด accessToken ๋ฐ์ ๋ refreshToken๋ ์๋ก ๋ฐ๊ธํด์ฃผ๋ ์๋น์ค๋ ์๋ค.
OAuth๋ ์ดํด๋ ๋๋๋ฐ 3์๊ฐ์ ์๋ค๊ฐ๋ค ํ๋๊ฒ ๋ง์์ ํท๊ฐ๋ฆฌ๋๊น ์ฌ๋ฌ ๋ฒ ์ฝ๊ณ ์ฌ๋ฌ ๋ฒ ๋จธ๋ฆฌ์์ ๊ทธ๋ ค๋ด์ผ ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋๋ ์ ๋ฆฌํ๋๊น ์์ด ์์ํ๋ค.
์ฐธ๊ณ ์๋ฃ
- https://www.youtube.com/watch?v=hm2r6LtUbk8&list=PLuHgQVnccGMA4guyznDlykFJh28_R08Q-&index=1 (๊ฐ๊ณ ์๋์ OAuth๊ฐ์)