개발자
안녕하세요! node.js express.js를 활용하여 백엔드를 개발중인 신입 개발자입니다. 앱 개발을 하고있는데 unity 프론트와 api통신을 해야하는 상황입니다. JWT를 활용하여 로그인 처리를 하고있는데 unity프론트와 API통신하면서 JWT때 사용하는 secretkey값을 공용으로 사용하고싶은데 혹시 실무에서 주로 처리하는 방법이 있을까요?? 보통 앱개발에는 안드로이드 keystore로 처리한다고도 하던데 서버단과 unity 클라이언트단 JWT secretkey를 같이 사용할 수 있는 방법 질문요청드립니다...! 헷갈리는부분... API 통신시 클라이언트단에서 로그인하고 유효성검사하고 암호화해서 api 통신하는 방식으로 흐름이 되는게 맞나요..?? 그리고 서버단에서 복호화해서 암호화하고 저장 api 통신시에 탈취가능성이 있지 않나는 클라이언트분의 말을듣고 위와 같은 질문을 드립니다... 제가 헷갈리는 부분인건지 아니면 api 전송시에는 암호화가 되지않아도 보안에 이상이 없는건지 서버단에서만 jwt 암호화 처리를 하면되는건지.... 이 부분은 어떤 흐름대로 이해하고 가야하나요?? ㅠㅠㅠ 너무 초보같은 질문이지만 질문드립니다..
답변 1
인기 답변
Https 를 사용한다는 가정하에 패스워드나 JWT를 클라이언트 => 서버로 보낼 때 암호화할 필요성은 없습니다. https://www.palindrom615.dev/client-side-hashing-is-not-helping 해도 되긴 하지만 크게 의미는 없다고 생각합니다. 로그인후 암호화 (안해도됨) 이후 정보를 받아서 서버에서 적합성 체크 (중복로그인, 패스워드가 맞는지, 적합한 로그인인지 등) 로그인 검증 절차를 수행 후 적절한 JWT (일반적으로 클라이언트에서 사용하는 짧은 Access Token과 자동로그인 등에 사용할 만료시간이 긴 RefreshToken)을 클라이언트에 보내주면 됩니다. 토큰의 관리는 클라이언트의 코드에 따라 달라지며 Cookie를 활용 가능하다면 RefreshToken은 Cookie(Http only)에 넣고 관리하는것이 보안상 가장 안전합니다. Access Token => API 통신(로그인)후 받아와 앱 내 변수나 상태관리 라이브러리에 저장후 사용 Refresh Token => API통신(로그인)후 서버에서 클라이언트의 Cookie에 저장 (앱에서는 접근불가) 후 필요시 해당 값을 서버에서 사용 다만 Cookie 에 넣고 활용하는 경우 앱이나 일부 환경에서는 불가능한 경우도 있고 개발 환경에서 셋팅 및 설정해야 될 것들이 많아질 수 있으며 요즘 추세가 no cookie가 대세라 상황을 보고 선택하시면 될 것 같습니다. + 프론트엔드(클라이언트&앱) 에서 SecretKey를 알아야 할 필요성이 있을까요?? 일반적으로는 잘 상상이 안가는데.. 혹시 어떤 경우일까요? JWT Token과 해당 데이터를 해쉬할때나 서명을 검증할 때 쓰는 SecretKey는 다른것이며 일반적으로 SecretKey는 백엔드의 환경변수 내부에서만 관리하면 됩니다.
성진
작성자
서버 • 2024년 02월 16일
답변 정말 감사합니다!! 지금 상황이 프론트(unity)와 서버쪽 보안쪽 관련해서 api통신 개발을 하고있는데 api 통신과정중에 혹시나 보안적으로 문제될수도 있지않나라는 의견이 나온상황이라 각각 암호화 복호화 하는 방식으로 진행했었습니다..!! 지금은 node.js 서버쪽엔 https 적용을 했고 .env에다가 key값을 저장한 상태입니다. 아무래도 경험자가 없다보니 이런 부분에 대하여 정보가 부족했던것 같습니다..! 감사합니다!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!