1. 서론
앞 포스트에서는 JWT의 정의 및 사용 이유에 대해서 다뤘다.
이번에는 JWT 동작 방식과 JWT를 사용할 때 보안을 높일 수 있는 방법에 대해 정리하고자 한다.
2. JWT 동작 방식
사용자 로그인 -> 서버에서 사용자 확인 후 토큰 발급
사용자가 서버로 데이터 요청 (token 포함) -> 서버는 토큰 확인 후 응답
3. JWT 보안 높이기
JWT는 stateless이기 때문에 한번 만들어지면 제어가 어렵다.
임의로 Access Token을 삭제할 수 없기 때문에 만료기간을 설정하지 않으면 탈취될 가능성이 높다.
1) JWT 만료 설정
Access Token에 유효기간을 지정함으로서 공격의 위험을 줄일 수 있다.
// 좀 더 어려운 방법. Epoch time 기준으로 계산하기 때문에 이렇다
jwt.sign({
data: "likewise very important",
exp: Math.floor(Date.now()/1000) + (60*60)
}, 'veryComplicatedSecreyKey')
// 쉬운 방법 jwt.sign({
data: "too important that it's not dangerous", },
'cuteDog', {expiresIn: '1h'}
)
참고: https://seo-tory.tistory.com/58
2) Cookie 사용
쿠키를 사용하면 xss(Cross Site Scripting) 공격을 HTTP Only option을 통해 예방할 수 있다.
(쿠키란? 사용자가 웹사이트 방문했을 때 웹사이트가 사용하는 서버에서 사용자의 로컬 환경에 저장하는 작은 데이터로
이전에 방문했는지, 로그인 했는지 등의 정보를 알 수 있다.)
3) HTTPS 사용
JWT가 탈취될 경우 Access Token, Refresh Token 뿐 아니라 개인정보도 노출될 수 있다.
-> HTTPS를 사용하면 서버와 클라이언트 사이의 모든 통신 내용이 암호화 되어 탈취되더라도 정보 노출의 위험을 줄일 수 있다.
(https 설정: https://support.google.com/domains/answer/7630973?hl=ko)
'web > network' 카테고리의 다른 글
JSP & Servlet (0) | 2024.03.18 |
---|---|
Web Server, WAS, DB (0) | 2024.03.18 |
HTTP & 쿠키 & 세션 (0) | 2024.03.13 |
JWT란? & JWT 사용이유 (0) | 2024.03.13 |
content-type (0) | 2024.01.29 |