๐Access Token ๋ฐ Refresh Token๐
์ด ๊ฒ์๋ฌผ์ ์ก์ธ์ค ํ ํฐ ๋ฐ ์๋ก ๊ณ ์นจ ํ ํฐ์ ๋ํ ๊ฐ๋จํ ์ฐ์ต์ ๋๋ค. ์์ ๋ฒจํธ๋ฅผ ๋งค๊ณ ๋จผ์ ํ ํฐ์ ๋ํด ์์๋ด ์๋ค.๐
๊ทธ๋ ๋ค๋ฉด ํ ํฐ์ด๋ ๋ฌด์์ ๋๊น?
ํ ํฐ์ ์ฌ์ฉ์์ ์ ์์ ์ธ์ฆํ๊ฑฐ๋ ์ฌ์ฉ์์๊ฒ ๋ฆฌ์์ค ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ ๋ฐ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณตํญ์์ ๋ณด์ ๊ฒ์๋๋ฅผ ํต๊ณผํ ๋ ์ ๋ถ์ฆ์ ์ ์ํ์ฌ ์ ์์ ํ์ธํ๋ฉด ์ข์์ ์์ ์ ์์ต๋๋ค.
์ก์ธ์ค ํ ํฐ๊ณผ ์๋ก ๊ณ ์นจ ํ ํฐ์ ๋ฌด์์ ๋๊น? ์ด๋ฏธ์ง ์ถ์ฒ: google.com
๊ฐฑ์ ํ ํฐ์ ์ก์ธ์ค ํ ํฐ์ ๊ฐฑ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ช ์ด ๊ธด ํ ํฐ(OAuth2์ JWT)์ ๋๋ค. ์ก์ธ์ค ํ ํฐ์ ์ฒ์ ๋ฐ์ผ๋ฉด ์๋ก ๊ณ ์นจ ํ ํฐ๋ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ก์ธ์ค ํ ํฐ์ ์๋ง์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ง๋ฃ ๊ธฐ๊ฐ์ด ๋ฉฐ์น ๋๋ ๋ช ๋ฌ์ด ์๋ ๋ช ์๊ฐ์ผ๋ก ์ ํ๋์ด ์๋ช ์ด ์งง์ต๋๋ค.
generateTokens(payload){
const accessToken = jwt.sign(payload, JWT_ACCESS_TOKEN_SECRET,{
expiresIn: '1h'
})
const refreshToken = jwt.sign(payload, JWT_REFRESH_TOKEN_SECRET,{
expiresIn: '1y'
})
return {accessToken, refreshToken}
};
์ฌ๊ธฐ์์ generateTokens ํจ์๊ฐ ์ฌ์ฉ์ ID์ธ ํ์ด๋ก๋๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. jwt.sign() ํจ์๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ํ ํ ํฐ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ์ ์ก์ธ์ค ํ ํฐ๊ณผ ์๋ก ๊ณ ์นจ ํ ํฐ์ด ์ ํจํ ์๊ฐ์ ์ ์ํ๋ expiresIn์ด๋ผ๋ ์ต์ ์ด ์์ต๋๋ค. ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ์๋ํ ๋ฆฌ์์ค์ ์ก์ธ์คํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ํจํ์ง ์์ ์ก์ธ์ค ํ ํฐ์ด ํฌํจ๋ API ์์ฒญ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ ์๋ต์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
HTTP/1.1 401 Unauthorized
๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ํด๋ผ์ด์ธํธ๋ ์์ ์ ๊ณ์ํ๊ธฐ ์ํด ๋ค์ ๊ถํ์ ๋ถ์ฌ๋ฐ๊ณ ๋ ๋ค๋ฅธ ์ก์ธ์ค ํ ํฐ์ ๋ฐ์์ผ ํ๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์ง ์๊ฒ ๋ฉ๋๋ค. ์๋ก ๊ณ ์นจ ํ ํฐ์ด ๊ทธ๋ฆผ์ ๋์ค๋ ๊ณณ์ ๋๋ค.
์๋ก ๊ณ ์นจ ํ ํฐ์ ์ก์ธ์ค ํ ํฐ์ ์๋ก ๊ณ ์น์ง ์์ง๋ง ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ์๋ฒ์์ ์๋ก ๊ณ ์นจ ํ ํฐ์ ํ์ธํ์ฌ ์ฌ์ฉ์๋ฅผ ์ํ ์ ์ก์ธ์ค ํ ํฐ์ ์์ฑํฉ๋๋ค. ์ด ์ก์ธ์ค ํ ํฐ์ผ๋ก ํด๋ผ์ด์ธํธ๋ ์์ ์ ๊ณ์ํ๊ณ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ฅผ ๋ฐฉํดํ์ง ์๊ธฐ ์ํด ๋ชจ๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ํฉ๋๋ค. ์๋ก ๊ณ ์นจ ํ ํฐ์ ์๋ก ์ก์ธ์ค ํ ํฐ์ ์ป๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค.
ํ์ง๋ง ์๋ก ๊ณ ์นจ ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
ํด๋ผ์ด์ธํธ๋ ์๋ก ๊ณ ์นจ ํ ํฐ์ ์์ฒญํ๊ณ ์๋ฒ๋ ์ฌ์ฉ์๋ฅผ ํ์ธํ๊ณ ์๋ก ๊ณ ์นจ ํ ํฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์ ์๋ต์ ๋๋ ค ์ ๋ฐ์ดํธํฉ๋๋ค.
๊ฐ์ฌ.
์์
๋ ์์ธํ ๋ด์ฉ์ ๋ณด๋ ค๋ฉด ๋ค์ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
https://oauth.net/articles/authentication/
https://auth0.com/docs/best-practices/token-best-practices
https://auth0.com/docs/tokens/json-web-tokens/json-web-token-structure
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐Access Token ๋ฐ Refresh Token๐), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/sagarmedtiya/access-token-and-refresh-token-3e47ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค