웹 | JWT 사용시 보안에 유의할 사항
페이지 정보
작성자 양지훈 조회112,700회 댓글0건본문
JWT는 사용자 인증, 신뢰성 있는 정보교환 용도로 쓰인다. 주로 사용자 인증으로 사용된다.
---------------------------------------------------------------------------
사용자 인증용도로 사용될 경우
암호화
HMAC 알고리즘으로 암호화하며 비밀번호(secret key) 는 서버만 가지고 있어야 한다.
특징
누구나 토큰 내의 정보를 볼 수 있으며 정보의 변조는 할 수 없다는 것이다. 누구나 정보를 볼 수 있다는 말은 비밀정보 또는 민감한 정보를 포함해서는 안된다는 말이다. 정보의 변조를 할 수 없다는 말은 토큰이 포함하고 있는 정보는 거짓이 아님을 확신할 수 있다는 것이다.
주의할점
1.토큰 자체가 신원이므로 토큰유효기간을 줘야 한다고 문서에서 말하고 있다. 하지만 유효기간을 주는 것은 궁극적인 해결책이아니다. 왜냐하면 토큰을 가로챈 자는 유효기간 내에 사용하면 유효하게 사용될수 있기 때문이다. (어쨌든 유효기간을 주는 것은도움이 된다.)
2.브라우저(앱이 아닌)의 로컬 스토리지는 누구나 쉽게 접근할 수 있으며 XSS 를 활용해 외부 네트워크에서도 접근이 가능하다. 따라서 브라우저의 로컬스토리지 또는 세션스토리에 토큰을 저장하면 안된다. 브라우저에서는 httponly 쿠키라는 곳에 저장해야한다.
3.네트워크상의 중간에서 토큰을 가로채는 경우도 있다. 이 문제는 https 사용과 관련이 있다.
---------------------------------------------------------------------------
정보교환 용도로 사용될 경우
암호화
RSA 또는 ECDSA 알고리즘을 사용합니다. 개인키는 서버, 공개키는 클라이언트에게 분배합니다.
특징
데이터의 진실성 뿐 아니라 비밀성을 보장합니다. 그래서 토큰정보를 누구나 해독할 수 없습니다.