|
3. JWT의 구성
aaaaaaa.bbbbbbb.ccccccc //헤더.페이로드.시그니처
구성은 헤더, 페이로드, 시그니처로 나뉩니다.
각 역할은 다음과 같습니다.
여기서 시그니처는 서명이라는 의미로 암호화하지 않고 변조 여부만을 확인하는 것이 JWT의 기본적인 구조입니다.
4. 세션 방식 VS. 토큰 방식
- 가장 큰 차이는 보안이 뚫렸을 때가 있습니다. 우선 세션 방식이 뚫리고 서버 개발자가 이를 알아챈다는 가정이면 서버 개발자가 세션을 만료시켜 추가적인 피해를 막을 수 있습니다. 다만 토큰 방식이라면 말이 다릅니다. 서버 개발자가 토큰을 만료시키거나 별도의 작업을 할 수 없습니다.
5. 엑세스 토큰과 리프레시 토큰
- 분리하는 목적은 클라이언트와 서버 간의 API 통신 중, 토큰이 탈취당할 수 있기 때문이다.그래서 직접 API를 호출하는 엑세스 토큰의 주기는 짧게 하고, (약 1시간) 엑세스 토큰을 재발급하는 리프레시 토큰의 주기는 비교적 길게 한다. (약 2주) 이런식으로 진행하면 엑세스 토큰이 털리더라도 만료 주기가 짧기 때문에 피해를 조금이나마 줄일 수 있다.
- 엑세스/리프레시 토큰 방식은 중간에 탈취당하는 케이스를 고려하고 있습니다. 그래서 엑세스 토큰 안에 중요한 값은 넣지 않습니다.유저 식별용 데이터라면 세션과 비슷하게 DB에 가상 ID 혹은 노출되도 상관없는 데이터를 넣습니다.
- 리프레시 토큰은 탈취 당할 수 있으니, 클라이언트에서 안전하게 저장하는 방식으로 개발이 진행됩니다. 따라서 토큰에는 털렸을때 가장 쓸모없는 데이터로, 서버에서 유저(테이터)를 식별할 수 있을 것으로한다. 이게 토큰에서 가장 좋은 방식입니다.
|