์ต๊ทผ ํ๋ก์ ํธ์์ ์์
๋ก๊ทธ์ธ ํ access token ์ ์ฅ ๋ฐ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ค,
localStorage
์ ์ ์ฅ๋ access token์ด ์ด์ํ๊ฒ **[object Object]**๋ก ์ ์ฅ๋๊ณ ,
API ์์ฒญ์ ์ธ์ฆ์ด ์ ๋๋ก ๋์ง ์๋ ํ์์ด ๋ฐ์ํ๋ค.
์ฒ์์ ๋จ์ํ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ์ง๋ง, ์ด ๋ฌธ์ ๋ฅผ ์ถ์ ํ๋ฉด์
๋๋ "access token", "SSE token", "์๋ต ํค๋ vs ๋ฐ๋" ๊ฐ๋
์ ์ ๋๋ก ์ดํดํ๊ณ ์์ง ์์๋ค๋ ๊ฑธ ๊นจ๋ฌ์๋ค.
์ฒ์์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ก access token์ ์ ์ฅํ๊ณ ์์๋ค.
const response = await axiosInstance.get('/api/jwt/access-token');
localStorage.setItem('access_token', response.data.data);
์ด๋ response.data.data
๋ ์๋์ ๊ฐ์ ํํ์๋ค:
{
tokenType: 'SSE',
value: 'eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6...'
}
์ฆ, ๋๋ ํ ํฐ ๊ฐ์ฒด ์ ์ฒด๋ฅผ ๋ฌธ์์ด ์์ด ์ ์ฅํด์ [object Object]
๊ฐ ๋ค์ด๊ฐ ๊ฑฐ์๋ค.
๋ฌธ์ ๋ ๋จ์ํ stringify๋ฅผ ์ ํ๋ค๋ ๋ฐ ์์ง ์์๋ค.
๋ฐฑ์๋ ํ์์๊ฒ ๋ฌผ์ด๋ณธ ๊ฒฐ๊ณผ, ๋ด๊ฐ ์ ์ฅํ๊ณ ์๋ value
๋
์ผ๋ฐ access token์ด ์๋๋ผ ์ค์๊ฐ ์๋ฆผ(SSE) ์ฐ๊ฒฐ์ ์ํ ์ ์ฉ ํ ํฐ์ด์๋ค.
๋ฐฑ์๋ ๊ตฌ์กฐ๋ ์ด๋ ๊ฒ ๋์ด ์์๋ค:
Authorization
): ์ผ๋ฐ access tokenSet-Cookie
): refresh tokendata.value
): SSE ์๋ฆผ ์ ์ฉ ํ ํฐ๋๋ ๋ฐ๋์ ๋ด๊ธด ํ ํฐ์ ์ผ๋ฐ ์ธ์ฆ์ฉ์ผ๋ก ์ฐฉ๊ฐํ๊ณ ๋ชจ๋ API์ ์จ๋ฒ๋ฆฌ๊ณ ์์๋ ๊ฒ.
์์ ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค:
const response = await axiosInstance.get('/api/jwt/access-token');
// ํค๋์์ ์ผ๋ฐ access token ์ถ์ถ
const authAccessToken = response.headers['authorization']?.replace('Bearer ', '');
if (authAccessToken) {
localStorage.setItem('access_token', authAccessToken);
}
// ๋ฐ๋์์ SSE token ์ถ์ถ
const sseToken = response.data.data?.value;
if (sseToken) {
localStorage.setItem('sse_token', sseToken);
}
์ด์ access_token
์ ์ผ๋ฐ API ํธ์ถ์ ์ฌ์ฉํ๊ณ ,
sse_token
์ ์๋ฆผ ๊ตฌ๋
์ ์๋์ฒ๋ผ ์ฌ์ฉํ๋ค:
const eventSource = new EventSource(`/api/notification/subscribe?token=${sseToken}`);
์๋ต ๋ฐ๋์ ์๋ต ํค๋์ ์ญํ ์ฐจ์ด
access token์ ๋ฌด์กฐ๊ฑด ๋ฐ๋์๋ง ์๋ ๊ฒ ์๋๋ค
โ ์คํ๋ ค ๋ณด์์์ ์ด์ ๋ก ํค๋๋ก ๋ด๋ ค์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค
refresh token์ HttpOnly ์ฟ ํค๋ก ์ค๊ธฐ ๋๋ฌธ์ JS์์ ์ ๊ทผ ๋ชป ํ๋ค
SSE ์ฐ๊ฒฐ์ฉ ํ ํฐ์ ๋ฐ๋ก ๊ด๋ฆฌํด์ผ ํ๋ฉฐ, ์ผ๋ฐ ์ธ์ฆ๊ณผ ๋ณ๋๋ก ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค
์ด ๊ฒฝํ์ ํตํด ๋๋ ์ธ์ฆ ๊ตฌ์กฐ์ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋ง์ด ๋ฐฐ์ ๋ค.
์์ผ๋ก ๋จ์ํ "ํ ํฐ์ด ์๋ค"๊ณ ํด์ ๋ฌด์กฐ๊ฑด access token์ผ๋ก ์ฐ์ง ์๊ณ ,
์ฉ๋์ ๋ฐ๋ผ ๊ตฌ๋ถํ๊ณ ์ ์ฅ ์์น๋ ๊ตฌ๋ถํด์ ๊ด๋ฆฌํ ๊ฒ์ด๋ค.