์ด๋ฒ์ ์ฒ์ ์์ ๋ก๊ทธ์ธ๋ฐฉ์์ ์ฒ๋ฆฌํ๋ฉด์ ๋ง์ ๋ถ๋ค์ ๋ธ๋ก๊ทธ ์ ๋ฆฌ๊ธ์ ์ฐธ๊ณ ํ์ต๋๋ค. ํ์ง๋ง ๋ก๊ทธ์ธ ๋ฐฉ์๋ ๋ค์ํ๊ณ , ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ ๋ง์? ๋ผ๋ ์๊ตฌ์ฌ์ด ๊ฐ๊ฒํ๋ ๋ฐฉ์๋ ๋ง์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ง์์ง๋ฉด์ ๊ด๋ จ ์ ๋ฆฌ๊ธ๋ ๋ง์์ง๋ฉด์ ๋ถ์กฑํ ๊ด์ ์์ ์ ์ ๊ธ๋ ๋ง๋ค๊ณ ์๊ฐํด ์ด ์ฐธ์ ์ธ์ฆ ์ธ๊ฐ ๋ฐฉ์์ ๋ํ BEST PRACTICE๋ฅผ ์ฐพ๊ณ ์ด์ ๋ํ ์๊ฐ์ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค.
์ธ์ฆ, ์ธ๊ฐ ๋ฐ ์์ ๋ก๊ทธ์ธ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ๋ํด์๋ ๋ค๋ฃจ์ง ์์ต๋๋ค!
์ฐ์ ์์
๋ก๊ทธ์ธ ๊ฐ์ ๊ฒฝ์ฐ OAuth2.0
๊ธฐ๋ฐ์ ์๋น์ค์
๋๋ค. ์ 3์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ์ฉ์๋ฅผ ๋์ ํด HTTP์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋ ๋ฉ์ปค๋์ฆ์
๋๋ค. ํ์ ๋ง์ด ์ฌ์ฉํ๋ naver๋ ๊ตฌ๊ธ ๊ณ์ ์ ์ด์ฉํ๋ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ์ด์ฉํ๋ ์ ๋ณด๋ฅผ ํตํด ํ ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ถํ์ ์ป์ ์ ์๋ ๊ฒ์ธ๋ฐ์. ๊ทธ๋์ ์ธ์ฆ๋ณด๋ค๋ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ ์ด์ ์ด ๋ง์ถฐ์ค ์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ฉด์ ํํ ์ฐพ์๋ณผ ์ ์๋ ๊ณผ์ ์ ์๋์ ๊ฐ์์ต๋๋ค.
์ด์ ์ ๊ตฌํํ๋ flow... ์ง๊ธ์ ๊ถ์ฅํ์ง ์์ต๋๋ค..๐ข
๊ตฌ๊ธ๋ง์ ํ๊ฒ ๋๋ฉด ์ด๋ฌํ ๋ฐฉ์์ ๋๋ฆฌ ํผ์ ธ์์์ต๋๋ค. ํ์ง๋ง ์๋ฌธ์ด ๋ค์์ต๋๋ค. ํด๋ผ์ด์ธํธ์์ ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ฐ๊ธ ๋ฐ๋๊ฒ ๋ง๋ ๊ฒ์ผ๊น?
์ด๋ฐ ๋ฐฉํฅ์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ๋ฐ์ํ๋ 2๊ฐ์ง ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
์์
๋ก๊ทธ์ธ ์์ ๋ก๊ทธ์ธ ์ดํ ๋ฑ๋ก๋ redirect url์ ์ฟผ๋ฆฌํ๋ผ๋ฏธํฐ๋ก code๋ฅผ ๋ฐ์ ์ฌ ์ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด url์ code๊ฐ ๋
ธ์ถ๋์ด ๋ฒ๋ฆฝ๋๋ค. ์ธ๊ฐ ์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ ์ธก์ ๋
ธ์ถ์์ผ ๋ฒ๋ฆฌ๋ฉด ๊ณ ์ ๋นํ ์๋ ์๋ค๋?? ๋ง๋ ์์ต๋๋ค.
์์ ์ธ๊ฐ ์ฝ๋๋ฅผ ์ด์ฉํด ์ฌ์ฉ์ ์ ๋ณด ๊ฒ์ฆ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋
ธ์ถ๋์ด์๋ ์๋๋ค๊ณ ํ๋จํ์ต๋๋ค.
๊ฒ๋ค๊ฐ ์ธ๊ฐ ์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ์์ ๋ฐ์์ค๊ณ ์ด๋ฅผ ๋ฐฑ์๋์ ์ ์กํ๊ณ ๋ฐฑ์๋์์ ๋ค์ ๋ฆฌ์์ค ์๋ฒ๋ก ์์ฒญํ๋ ํ๋ฆ์ด ๋ณต์กํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ ์ธก์์ ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ฐ๊ธ ๋ฐ๋ ๊ฒ์ด ์๋ ๋ฐฑ์๋์์ ์ธ๊ฐ ์ฝ๋ ๋ฐ๋ ๋ฐฉ์
์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ๋์์ต๋๋ค.
์ ๋ฆฌํ๋ฉด ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํด๋ผ์ด์ธํธ์์ ๋ก๊ทธ์ธ ์ดํ redirect url์ ๋ฐฑ์๋ url๋ก ์ค์ ํฉ๋๋ค.
- ๋ฐฑ์๋ url๋ก ์ค์ ํ๊ฒ ๋๋ฉด ๋ฐฑ์๋์์๋ redirect url์์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.
- ๋ฐ์ ์ธ๊ฐ์ฝ๋๋ก ์ธ์ฆ ํ ํฐ์ ๋ฐ๊ธ ๋ฐ๊ณ ์ฒ๋ฆฌํฉ๋๋ค.
์ฌ์ค ์ด๋ฌํ ํ๋ฆ์ ์นด์นด์ค developer ๊ณต์ ๋ฌธ์์์๋ ํ์ธํด ๋ณผ์ ์์ต๋๋ค.
๋ฐฑ์๋์์ ์ธ๊ฐ ์ฝ๋๋ฅผ ํตํด ํ ํฐ์ ๋ฐ๊ธ ๋ฐ์ ์ดํ์๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ๊น์??
๋๊ฐ์ง ๋ถ๊ธฐ๋ฅผ ์๊ฐํ ์ ์์์ต๋๋ค.
๊ธฐ์กด์ ๊ฐ์ ๋์ด ์๋ ์ฌ์ฉ์์ผ ๊ฒฝ์ฐ, accessToken์ ๋ฐ๊ธํ๊ณ refreshToken์ ์๋ฒ๋จ(DB ํน์ Redis)์ ์ ํจ๊ธฐ๊ฐ์ ์ค์ ํ ์ฑ ๋ด์๋จ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ redirect Url์ ๋ฉ์ธํ์ด์ง๋ก ์ด๋์์ผฐ์ต๋๋ค.
๊ธฐ์กด ์ฌ์ฉ์์ ๋ํ ์ฒ๋ฆฌ๋ ์์ธ ์ฒ๋ฆฌํด์ผํ ์ฌํญ์ ๋ฑํ ์์์ต๋๋ค. ํ์ง๋ง ์ ๊ท ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์์ธ ์ฌํญ์ด ์กด์ฌํ์ต๋๋ค. ์ ํฌ ์๋น์ค๋ ์ ๊ท ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฌ ์ธ๊ฐ๋ฅผ ๋ฐ๊ณ ๋ฆฌ์์ค ์๋ฒ์์ ๊ธฐ๋ณธ์ ๋ณด๋ฅผ ๋ฐ์์ DB์ ์ ์ฅํ๊ณ , ์ดํ ํด๋ผ์ด์ธํธ ํ์๊ฐ์ ํ์ด์ง๋ก redirect(Url์ accessToken์ ํฌํจ)ํ์ฌ ์ถ๊ฐ์ ๋ณด๋ฅผ ๋ฐ์ ์ต์ข ์ ์ผ๋ก ํ์๊ฐ์ ์ ํ๋ ๊ตฌ์กฐ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ ๊ท ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญํ ํ์๊ฐ์
ํ์ด์ง์์ ํ์๊ฐ์
์ ํ์ง ์๊ณ ์ดํํ๋ ์ผ์ด์ค๊ฐ ์๋ค๋ฉด ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ?
์ ๋ํ ๊ณ ๋ฏผ์ ํด๋ณด์์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋ฆฌ์์ค ์๋ฒ์์ ๋ฐ์์จ ํ์ ์ ๋ณด๊ฐ ๋ถํ์ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ DB๋ฅผ ํ์ธํ์ฌ ํ์๊ฐ์
ํ์ง ์์ ์ ๋ณด๋ฅผ ๋งค๋ฒ ์ง์์ฃผ๋ ๋ก์ง์ด ํ์ํ์ต๋๋ค. ๊ทธ๋์ ์ ํฌ๋ ๋ถํ์ํ ์ ์ ์ ๋ณด๋ฅผ ์๋ฒ์์ ํ์ธํ์ฌ ๋งค์ผ ์ง์ฐ๋ ํ์์ผ๋ก ์งํํ์์ต๋๋ค. (๋ฐฑ์๋ ํ์
์๋ถ์ด ๋ณธ์ธ ์ค๋ฌด์์๋ ์ด๋ ๊ฒ ์ฒ๋ฆฌํ๋ค๊ณ ๋ง์ํ์
จ์ต๋๋ค. ๋ชจ๋ฒ์ฌ๋ก์ธ์ง๋ ์ ํํ๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค...)
ํ๋ฆ ์ ๋ฆฌ
- ์๋ฒ์์ ์ธ์ฆ์ด ์๋ฃ๋๋ฉด, ํด๋ผ์ด์ธํธ ์ฃผ์๋ก redirectํฉ๋๋ค.(์ด๋ accessToken์ queryparemeter์ ํฌํจ์ํต๋๋ค.)
- ๊ธฐ์กด ํ์์ผ ๊ฒฝ์ฐ ๋ฉ์ธํ์ด์ง, ์ ๊ท ํ์์ผ ๊ฒฝ์ฐ ํ์๊ฐ์ ํ์ด์ง๋ก redirectํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ์์ queryparemeter์ ์๋ accessToken์ ๋ธ๋ผ์ฐ์ ์ ์ฅ์์ ์ ์ฅํฉ๋๋ค. ์ดํ ์์ฒญ์๋ header์ accessToken์ ํฌํจํด ์์ฒญํฉ๋๋ค.
- ์ ๊ท ํ์์ด์ง๋ง ํ์ ๊ฐ์ ํ์ด์ง๋ฅผ ์ดํํ ๊ฒฝ์ฐ ์๋ฒ์์ ํ๋ฃจ ๋จ์๋ก ํ์ธํด DB๋ฅผ ์ง์๋๋ค.
์ ์ ๊ฒฝ์ฐ accessToken์ localStorage์ ์ ์ฅํ๊ณ , ์ด๋ฅผ header๋ด์ ์๋ฒ์ ์์ฒญ์ ํ์ต๋๋ค. localStorage์ ์ ์ฅํ๋ ์ด์ ๋ ํญ์ ๋ซ๊ฑฐ๋, ๊ฐ์ ๋ก ์ง์ฐ์ง ์๋ ์ด์ ์ฌ๋ผ์ง์ง ์์ ๋ก๊ทธ์ธ์ ์ ์ง ํ ์ ์๋ค๋ ์ฅ์ ์ด ์ปธ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ณด์์ ์ธ ์์๋ ์๊ฐํด ๋ด์ผ ํ์ต๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฅ ๋ง์ด ๋ณด์ด๋ ์ทจ์ฝ์ ์ค ํ๋์ด๋ฉฐ, ์น์ฌ์ดํธ ๊ฐ๋ฐ์๊ฐ ์๋ ์ 3์๊ฐ ์น์ฌ์ดํธ์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํด ์คํํ ์ ์๋ ์ทจ์ฝ์ ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์ ์ฅ์๋ window global๊ฐ์ฒด, ์ฆ javascript๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ๋ฌธ์ ๊ฐ ์๊ณ XSS๊ณต๊ฒฉ์ด ๊ฐ๋ฅํด์ง๋๋ค.
++์ถ๊ฐ๋ก React์์ ์ ์ฒ๋ฆฌ
//์
์ฑ ์คํฌ๋ฆฝํธ
const insertHtml = `<span><svg/onload=alert(origin)></span>`
const App = () => {
return <div dangerouslySetInnerHTML={{ __html : insertHtml }}/>
}
dangerouslySetInnerHTML ์์ฑ์ ํน์ ๋ธ๋ผ์ฐ์ DOM์ innerHTML์ ํน์ ๋ด์ฉ์ผ๋ก ๊ต์ฒดํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์์ ์ฝ๋์์ insertHtml์ด๋ผ๋ ์ ์ฑ ์ฝ๋๋ฅผ ์ 3์๊ฐ ์ฝ์ ํ๊ฒ ๋๋ฉด div์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๊ฒ ๋ฉ๋๋ค.
์ฌ์ค react์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก XSS๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํ ์ด์ค์ผ์ดํ ์์ ์ด ์กด์ฌํฉ๋๋ค.
const insertHtml = `<span><svg/onload=alert(origin)></span>` const App = () => { return <div id={html}>{html}</div> }
์ด์ ๊ฐ์ด ์ฒ๋ฆฌ ํ๋ค๋ฉด ์ค์ Html์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌ ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ฐ๋ฐ์์ ํ์ฉ๋์ ๋ฐ๋ผ ์๋ณธ ๊ฐ์ด ํ์ํ ์ ์๊ธฐ ๋๋ฌธ์ dangerouslySetInnerHTML์์ฑ์ผ๋ก ๊ฐ์ ๋ฐ์ ์ ์๊ฒ ์ฒ๋ฆฌ ํด๋จ์ต๋๋ค.
์ 3์๊ฐ ๋ค๋ฅธ ์ฌ์ดํธ(cross site)์์ ์ฌ์ดํธ์ API์ฝ์ ์์ฒญํด ์คํํ๋ ๊ณต๊ฒฉ์ ๋๋ค. ์ 3์๋ ์ ์ ์ ๊ถํ์ผ๋ก ํน์ ํ์๋ฅผ ํ๋๋ก ๊ตฌ์ฑํ์ฌ ์๋ฒ์ ์์ฒญํ์ฌ ํผํด๋ฅผ ๋ง๋ญ๋๋ค. ๋ณดํต ์ํ๊ถ์์ ํผํด ์ฌ๋ก๋ฅผ ์ฐพ์๋ณผ ์ ์์ต๋๋ค. ์ 3์๊ฐ ํผํด์์ ๊ถํ์ผ๋ก ํน์ ๊ณ์ข๋ก ์ด์ฒดํ ์ ์๊ฒ๋ ๊ณต๊ฒฉ์ ํ ์ ์์ต๋๋ค.
์ด์ ๊ฐ์ ๊ณต๊ฒฉ๋ค์ ๋ณดํธํ๊ธฐ ์ํด ํ ํฐ์ ์ด๋์ ์ ์ฅํ๋์ ๋ฐ๋ผ ๋ค์ํ ๋ณด์ ์กฐ์ทจ๊ฐ ์ด๋ค์ง ์ ์์ผ๋ฉฐ, ์ด๋ป๊ฒ ์ ์ฅํ๋๋์ ๋ฐ๋ผ ์ฅ๋จ์ ์ด ์๊ณ ์๊ฒฌ์ด ๋ถ๋ถํฉ๋๋ค.
cookie์ ํ ํฐ์ ์ ์ฅํ๊ฒ ๋๋ฉด Http์์ฒญ์ ํ ๋๋ง๋ค ์๋์ผ๋ก ์ ์ก๋๋ ์ ๊ณผ jsํ๋ ์์ํฌ ๋ค์ XSS๊ณต๊ฒฉ์ ๋ํ ์ด์ค์ผ์ดํ ๊ธฐ๋ฅ์ด ๊ฐ๋ ฅํ๋ค๋ผ๋ ์ ์์ csrf๊ณต๊ฒฉ์ ๋ ์ค์์ํด์ผ ํ๋ค๋ผ๋ ์๊ฒฌ์ ๋๋ค.
ํ ํฐ์ ํ ํฐ์ ์ ์ฅํ๋๊ฒ ํ๋ช ํ๋ค๋ ์๊ฒฌ.
์์ฝ - ์น ์ ์ฅ์์ ํ ํฐ์ ์ ์ฅํ ์๋ ์์ง๋ง XSS๊ณต๊ฒฉ์ ๋ ธ์ถ๋๋ฉฐ, jsํ๋ ์์ํฌ์์ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์์ง๋ง ๋ชจ๋ ์ทจ์ฝ์ ์ ๋ค๋ฃจ์ง๋ ์์ต๋๋ค. ์น ์คํ ๋ฆฌ์ง๋ ์ด๋ ํ ๋ณด์ ํ์ค๋ ์ํ๋๊ณ ์์ง ์์ง๋ง ์ฟ ํค๋ ์ฌ๋ฌ ๋ณด์ ์๋ฃจ์ ์ด ์กด์ฌํฉ๋๋ค.
์ค์ ๋ก ์ฟ ํค๋ XSS๊ณต๊ฒฉ์ ๋๋นํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก httpOnly
์ต์
์ ์ ๊ณตํฉ๋๋ค.
๋ํ ๊ฐ์ ์ฌ์ดํธ์์์ ์์ฒญ์ธ์ง ํ๋จํ๋ same-site
์ต์
๊ณผ httpsํต์ ํ ๋๋ง ์ฟ ํค๋ฅผ ํ์ฉํ๋ secure
์ต์
๋ฑ์ ํตํด ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
๊ด๋ จ ๋งํฌ
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ ํฐ์ ์ฟ ํค์ ์ ์ฅํด๋๊ณ ์์์ ๋์ดํ ์ต์ ๋ค์ ์ค์ ํ๋ ๊ฒ์ด ๋ณด์์์๋ฅผ ์งํฌ ์ ์๋ ๊ฒ์ผ๋ก ํ๋จํ์ต๋๋ค.
accessToken์ ๊ฒฐ๊ตญ http์ stateless, connectionless ์ฑ๊ฒฉ์ ์ ์ด์ฉํ ๊ฒ์ ๋๋ค.ํ์ง๋ง ์ด ๋๋ฌธ์ ํด๋ผ์ด์ธํธ ์ธก ์ฟ ํค์ ์ ์ฅํด์ผ ๋๋ฉฐ, ์ด๋ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด ๋ ธ์ถ์ด ๋ฉ๋๋ค. ์ด ๋๋ฌธ์ refresh token์ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ์ต๋๋ค.
refreshToken์ accessToken์ด ๋ง๋ฃ๋์์ ๋ ์ฌ๋ฐ๊ธ์ ์ํ ํ ํฐ์ด๋ผ๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ์ง๋ง ํต์ฌ์ accessToken์ ์ ํจ๊ธฐ๊ฐ์ ์ต๋ํ ์งง๊ฒ ์ฃผ๊ณ refreshToken์ ์ ํจ๊ธฐ๊ฐ์ ๊ธธ๊ฒ ๊ฐ์ ธ๊ฐ accessToken์ด ๋ ธ์ถ๋๋๋ผ๋ ์ฝ๊ฒ ์ 3์๊ฐ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ๋ง์ ์ ์์ต๋๋ค.
์ ๋ช IT๊ธฐ์ ์ ํ ํฐ ์ ํจ์๊ฐ
ํ ํฐ์ ์ ํจ ์๊ฐ์ ์ทจํฅ์ฐจ์ด...??
๊ทธ๋ ๋ค๋ฉด refreshํ ํฐ์ ์ด๋์ ์ ์ฅํ๋ ๊ฒ ์ข์๊น์??
ํ์ฌ ์๋ฒ DB์ ๋ก๊ทธ์ธ ํ ํฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. accessToken์ด ๋ง๋ฃ ๋์์ ๋ refreshToken์ ์กฐํํ๊ณ accessToken์ ์ฌ๋ฐ๊ธํฉ๋๋ค. ์ด๋ ๊ฒ ์์ฒญํ๊ฒ ๋๋ฉด DB์ ์ ์ฅํ๋ค๋ฉด ํ ํฐ์ ์กฐํํ๋๋ฐ ๋ง์ ๋ถ๋ด์ ์ค ์ ์์ต๋๋ค.
accessToken๋ง๋ฃ ์๊ฐ์ด 10๋ถ์ด๊ณ , ์ฌ์ฉ์๊ฐ 100์ด 1์๊ฐ ๋์ ์๋น์ค ์ด์ฉํ ๋ => ์ฟผ๋ฆฌ ์์ฒญ ์ฝ 600๋ฒ
๋ํ DB์ ์ ์ฅ๋ refreshํ ํฐ์ด ๋ง๋ฃ๋๋ค๋ฉด ์ฃผ๊ธฐ์ ์ผ๋ก ์ด ํ ํฐ์ ์ญ์ ํ๊ณ ์์ ํ๋ ๋ฑ์ ์ฃผ๊ธฐ์ ์ธ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ํ ์คํธ ์ฉ๋๊ฐ ์๋๋ผ๋ฉด ์ถ์ฒ๋๋ฆฌ์ง ์์ต๋๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ Redis์ ์ ์ฅํ๋ ๋ฐฉ์์
๋๋ค. Redis๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์ ์ฅ์(์ผ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ SSD,HDD๊ฐ์ ๋ณด์กฐ๊ธฐ์ต์ฅ์น์ด์ง๋ง Redis๋ RAM)์ด๊ธฐ ๋๋ฌธ์, ๋์คํฌ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ๋น ๋ฅธ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ์ฆ ์์คํ
์์ ๋ง์ ์์ฒญ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ ์ํฉ์์ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฃผ๋ชฉํด์ผ ํ ์ ์ ์บ์
์ ๊ฐ์ด ๋ฐ์ดํฐ ๋ง๋ฃ์๊ฐ์ ์ธํ
ํด ๋์ ์ ์์ด ์ง์ DB์ ์ ๊ทผํด ์ง์ธ ํ์๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฃผ๊ธฐ์ ์ผ๋ก DB์ ์ ๊ทผํด์ผํ๋ ์ธ์ฆ,์ธ๊ฐ ๋ฐฉ์์๋ Redis๋ฅผ ์ฌ์ฉ์ด ์ข์ต๋๋ค.
์์
๋ก๊ทธ์ธ์ ๋ค๋ฃจ๋ ๋ง์ ๋ธ๋ก๊ทธ๊ธ๋ค์ ์ฝ์์ต๋๋ค. ๋์ฒด๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋น์ทํ๊ฒ์ด ๋ง์์ต๋๋ค. ํ๋ก ํธ์์ ํ ํฐ์ด๋ ์ธ๊ฐ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋
ธ์ถ์ํค๊ณ ๋ฐฑ์๋์ ์ ์กํ ํ ๋ฆฌ์์ค์๋ฒ์ ์ธ์ฆ๋ฐ๋ ๋ฐฉ์
์ด ๋ง์๋๋ฐ์. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ด ๋ฐฉ์์ด ์ณ์ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.(๊ทธ๋ ๋ค๊ณ ์ ํด๊ฒฐ ๋ฐฉ์์ด ๋ชจ๋ฒ ์ฌ๋ก๋ผ๊ณ ๋ง์์ ๋๋ฆฌ์ง๋ ๋ชปํฉ๋๋ค...)
๊ฐ๋ฐ์์ ๊ณต๊ธ์ด ๋ง์์ง๋ฉด์ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์์ฑํ์๋ ๋ถ์ด ๋ง์์ก์ต๋๋ค. ๊ณ ํ๋ฆฌํฐ์ ๊ธ๋ถํฐ ํ๋ฌด๋งน๋ํ ๊ธ๊น์ง ๋ค์ํ ๊ธ์ด ์์๋๋ฐ์. ๋จ์ํ ์ด๋ค ์ ๋ณด๋ฅผ ์์นญํ ๋ ๋จ์ํ ๋ช๊ฐ์ ๊ธ ๊ฐ์ง๊ณ ํ๋จํ๊ธฐ ๋ณด๋ค๋ ๋๋๋ก ๋ค์ํ ๊ธ์ ํตํด ์ ๋ณด๋ฅผ ์ต๋ํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
https://velog.io/@ch4570/OAuth-2.0-JWT-Spring-Security%EB%A1%9C-%ED%9A%8C%EC%9B%90-%EA%B8%B0%EB%8A%A5-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0-OAuth-2.0%EC%9D%84-%EC%84%A0%ED%83%9D%ED%95%9C-%EC%9D%B4%EC%9C%A0
https://nordvpn.com/ko/blog/csrf/