배경
프로젝트에서 웹소켓을 활용해 실시간으로 데이터를 서버에 요청하게 되는데, 실시간성이기 때문에 매번 인증하는 방식보다는 토큰을 활용하는 방식으로 프로젝트를 구현했다.
특히나 소켓 서버는 사용자 접속량에 따라 서버 확장성을 고려해서 설계하였고, 이러한 경우에도 토큰이 유용할 수 있다.
장점만을 들면서 선택하고 활용했는데... 취약점과 해결방법?!
쭈글.. 알아보자..
취약점에는 뭐가 있을까?
JWT 토큰의 탈취라고 생각되는데요..(맞나요..?)
우선은 비밀키가 있으면 토큰을 해석할 수 있기 때문에, 서버에서 비밀키는 잘 관리해야 한다.
이를 위해서 환경변수등을 통해서 관리할 수 있고, 주기적으로 비밀 키 값을 변경하는 것 도 좋을 것 같다.
또한 만료시간을 최대한 짧게 설정해서, 탈취를 당해도 사용할 수 없도록 하는 것이 좋을 것이다.
만약 너무 짧아서 자주 로그인을 요구하는 경우라면, 리프레쉬 토큰 도입을 고려해볼 수 있다.
또한 탈취됐다고 판단되는 토큰이 있다면 서버측에서 해당 토큰을 제한할 수 있을 것이다.
마지막으로 안전한 해시 알고리즘을 사용하는것이다.
프로젝트에서는 SHA-512를 사용했었다.
대칭키 알고리즘으로 비대칭키보다 처리속도가 빠르고 서버 자원을 덜 소모한다는 장점이 있다.
실제로 JWT 토큰과 많이 사용되는 알고리즘 방식이기 때문에 SpringSecurity의 지원으로 쉽게 적용할 수 있었다.
'궁금한 내용은 바로 알아보기!' 카테고리의 다른 글
[모호하면 바로] Nginx는 어디에 사용되는걸까? (1) | 2024.10.14 |
---|---|
[모호하면 바로] HTTP Method의 Patch 동작방식? (0) | 2024.09.21 |
[모호하면 바로] 해시함수가 머야? 인코딩이랑의 차이는? (0) | 2024.09.18 |
[모호하면 바로] 인덱스가 왜 B트리를 사용할까? (0) | 2024.09.18 |
[모호하면 바로] CORS 알아보기 (0) | 2024.09.18 |