개발자
안녕하세요! 프론트엔드 공부하고 있는 취준생입니다. 토큰에 대해 이해가 안되는 것이 있어서 질문을 올립니다. 토큰은 복호화, 암호화와 달리 서명을 통해 무결성을 확인하는 것으로 알고 있는데요, 이를 통해 토큰을 로컬스토리지나 전역 상태 라이브러리등을 사용하여 저장하는 걸로 배웠습니다. 로컬스토리지나 전역 상태 라이브러리를 사용하는 것이 클라이언트에 노출하는 것이랑 보안적으로 다른 것인가요? 사실 이것이 어떻게 안전한 것인지 의아해서 질문을 올립니다. 토큰도 결국 string 문자열일 뿐이고, 이를 복사하여 서버 데이터에서 유저 정보를 빼낼 수 있지 않나요?
답변 1
완전한 서버 사이드 인증 시스템이 아니면 사실 보안성은 떨어집니다. 보안성을 낮추는 대신 소프트웨어 아키텍쳐 상 챙겨가는 이점이 몇 가지 있기 때문에 trade-off를 하는 것이죠. 토큰은 보통 로컬이나 세션 스토리지에 저장하곤 합니다. 하지만 이 방식은 자바스크립트로 토큰을 빼가는 XSS 공격에 대응하기 어렵습니다. 그래서 cookie에 토큰을 담으면서 Http-Only 옵션을 사용하고, 추가적으로 HTTPS까지 활성화 시킵니다. 이것만으로는 보안성이 높다고 하긴 어렵기 때문에, 정말 다양한 방법을 동원해 보안성을 높입니다. 언급해드린 방안은 쿠키를 사용하니까, CSRF 도입처럼 쿠키 관련 보안 방법을 많이 고려할 수 있겠죠. 클라이언트에 노출되는 토큰이기에 지금처럼 의심을 한가득 가지고 대응할 수 있는 방법을 찾아보시면 좋을 것 같습니다!
박정우
작성자
개인 비전공 • 2023년 12월 21일
사용성과 보안성의 균형이라고 생각하면 편할까요?? 보안 방법에 대해서 조금 알아볼 필요가 있겠네요! 빠르고 친절한 답변 정말정말 감사드립니다!
장성호
현대오토에버 백엔드 • 2023년 12월 21일
서비스가 확장됨에 따라 서비스 안정성과 보안성의 균형인 것 같아요! Stateless와 Stateful 차이에서 오는 아키텍처 설계 난이도 차이가 있거든요. 서버가 여러 대이고 디비도 여러 대일 때, 세션(Stateful)과 JWT(Stateless)의 시나리오가 많이 차이납니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!