개발자
jwt 인증을 어디까지 사용하는건지 궁금합니다. 토큰에 담긴 유저정보를 사용 할 수 있도록 리턴해주어야 하는지 아니면 인증이 되었다면 더이상 사용하지 않고 req.body등에 담긴 userID를 가지고 다시 유저 정보를 가져오는 건지 궁금합니다.
답변 1
jwt를 활용하는 범위는 정하기 나름입니다만 제가 썼던 대로 간단히 써보겠습니다. 클라이언트단 = 프론트엔드 서버단 = 백엔드 1. access토큰의 만료여부 클라이언트단에서 체크 - 만료되지 않았다면 로그인 시킵니다. - 이때 서버에서 로그인을 체크하며 유저 정보를 catch해올 수 있습니다. 단 이 부분은 보안적 처리가 꼭 들어가야 합니다. 최소한의 정보만 가져오는 것이 좋습니다. - 유저 정보를 가져올시, spring security 등의 방식이 적용되면 효과적입니다. (인증, 인가 처리) - access토큰 자체내에도 어느정도 심을수는 있지만 보통 비추합니다. 정 필요할때만 활용하는 것이 좋습니다. (userNo 정도는 암호화해서 심었습니다.) - 만료되었다면 refresh 토큰으로 서버에 갱신요청을 보내는 일을 합니다. 2. access토큰 만료로 인한 refresh토큰 서버단에서 체크 - refresh토큰의 유효정보를 체크하고 갱신후 재발급해줍니다. - 재발급된 access토큰은 클라이언트단에 전송됩니다. - refresh토큰까지 만료되었다면 로그인할 수 없게 합니다. 3. 재발급된 access토큰을 클라이언트단에서 다시 체크 - 1의 단계를 반복합니다. 4. refresh토큰 만료 - 여기는 서비스단의 협의하에 정하기 나름입니다. - 우선 로그인 만료를 사용자에게 표기하고 사용자가 재시도시 refresh를 재발급해주고 또 로그인 할수 있게 해줄지, 아닐지 5. refresh토큰 자체를 안 사용하는 경우? - 일반적이지는 않은 것 같습니다. 왠만해선 refresh와 쌍으로 움직이는게 일반적입니다. 여기까지가 간단한 flow이고 실제 예외는 프론트엔드 <-> 백엔드단 통신시 400 (unauthorized) 코드를 통해 정의하고, 처리합니다. jwt는 기존의 세션 관리로 인한 잦은 서버호출을 방지하기 위해 사용하는 것이므로 클라이언트 단에서 토큰의 만료여부를 꼭 판단할수 있어야 합니다. 또한 access토큰과 refresh토큰을 사용함으로서 여러 다른 처리들이 들어갑니다. 보안적 측면에서는 access토큰이 탈취당하더라도 유효시간이 짧으므로 refresh토큰을 모르면 갱신할 수 없을테지만, 이 요청 자체도 서버에서 검증하고자 하면 jwt를 블랙리스트나 화이트리스트 방식 같은걸로도 관리할 수 있습니다. 이와 같이, jwt를 사용하는 배경 등을 인지하시고 사용하시면 좋을 것 같습니다.
익명
작성자
2024년 04월 04일
오, 정말 감사합니다!! 참고해 보겠습니다 :-) 제가 배경에 대해 잘 몰랐던 것 같네요
박정환
HecatonAI Lab Leader • 2024년 04월 04일
간단하게 설명할려했는데 길어졌네요. (써놓고보니 다 jwt라고만 썼네요 ㅋ access토큰으로 수정했습니다) 여러 보안 처리 등은 실무에서 하는 방식들이 또 따로 있을수 있습니다. 지금은 말씀드린대로 배경지식과 flow를 익히시고 별개로, 자신의 서비스에 이 기술이 적용이 적당한가? 또한 판단해보는 자세도 좋겠습니다. 기술을 사용할때 A와 B가 있는데 판단해보니 어떠한 근거로 A가 더 나으므로, A를 쓰겠다 라는 결론을 내릴수 있도록 하는게 좋기 때문입니다. 그럼 즐거운 개발 되세요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 04월 04일
JWT (JSON Web Token) 인증은 두 주체간에 정보를 안전하게 전송하기 위한 컴팩트하고 독립적인 방식입니다. JWT는 디지털 서명을 사용하기 때문에, 정보의 신뢰성을 검증할 수 있습니다. JWT 토큰은 주로 인증 및 세션 관리에서 사용되며, 클라이언트와 서버 간에 정보를 안전하게 전송하는데도 사용됩니다. 일반적으로, 클라이언트가 로그인 요청을 보내면 서버는 해당 요청을 확인하고 JWT 토큰을 생성하여 클라이언트에게 반환합니다. 클라이언트는 이 토큰을 저장해 둔 후, 이후 요청에 이 토큰을 포함하여 서버에 보냅니다. JWT 토큰 내부에는 유저의 정보가 포함될 수 있습니다 (예: username, email 등). 하지만 보안상의 문제로 중요한 개인정보는 JWT에 포함하지 않는 것이 좋습니다. JWT 토큰은 로컬 스토리지나 쿠키 등에 저장될 수 있는데, 만약 이 토큰이 탈취당하면 그 안에 담긴 모든 정보가 유출되기 때문입니다. 따라서 일반적으로 JWT 토큰은 유저를 인증하는데 사용되며, 이와 별개로 필요한 유저 정보는 별도의 요청을 통해 서버에서 가져오는 것이 일반적입니다. 서버는 클라이언트에게 반환된 JWT 토큰을 통해 클라이언트의 아이덴티티를 확인하고, 이를 바탕으로 해당 유저의 데이터에 접근합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!