
JSON Web Token(JWT)은 두 당사자 간에 정보를 안전하게 전송하기 위한 방법으로, JSON 객체로 구성된 토큰입니다. JWT는 헤더, 페이로드, 서명의 세 부분으로 이루어져 있습니다.
헤더: 토큰의 유형과 사용된 서명 알고리즘 정보를 포함합니다.
페이로드: 사용자 정보나 인증 관련 데이터를 포함하며, 주로 클레임이라고 불립니다.
서명: 헤더와 페이로드를 암호화하여 생성된 서명으로, 토큰의 무결성을 검증하는 데 사용됩니다.
사용자가 아이디와 비밀번호를 입력하여 서버에 인증을 요청합니다.
서버는 사용자의 인증 정보를 확인하고, JWT 토큰을 생성하여 클라이언트에게 전송합니다.
클라이언트는 받은 JWT 토큰을 저장합니다. 보안을 위해 HttpOnly와 Secure 플래그가 설정된 쿠키에 저장하는 것이 좋습니다.
클라이언트는 이후 요청 시 JWT 토큰을 Authorization 헤더에 포함하여 서버에 전송합니다.
서버는 받은 토큰의 서명을 검증하고, 유효한 경우 요청을 처리합니다.
강력한 알고리즘(RS256, HS256 등)을 사용하여 서명합니다. 약한 알고리즘은 피해야 합니다.
토큰의 유효 기간을 설정하여 만료 시점을 제한합니다. 일반적으로 15분에서 30분 정도로 설정합니다.
리프레시 토큰을 사용하여 세션을 연장할 수 있습니다. 이는 사용자가 로그아웃하지 않아도 토큰을 갱신할 수 있게 합니다.
JWT는 민감한 정보를 포함하지 않도록 하고, HttpOnly 및 Secure 플래그가 설정된 쿠키에 저장해야 합니다.
사용자가 로그아웃하거나 비밀번호를 변경할 때 토큰을 무효화하는 메커니즘을 구현해야 합니다.
JWT는 상태가 없는 인증 및 권한 부여를 제공하여 웹 애플리케이션의 보안과 사용자 경험을 향상시킬 수 있습니다. 그러나 JWT의 보안 취약점을 이해하고 적절한 보안 조치를 취하는 것이 중요합니다. 이를 통해 JWT를 안전하게 사용하여 애플리케이션의 보안을 강화할 수 있습니다.