JWT는 정보를 안전하게 전달하기 위한 토큰 기반의 인증 방식입니다. JWT는 웹 애플리케이션 간에 사용자 인증 정보를 안전하게 전송하거나 인증된 사용자임을 확인하기 위해 주로 사용됩니다.
JWT는 Header,Payload,Signature로 세 부분으로 이루어져 있습니다.
Header(헤더) : JWT의 헤더에는 토큰의 유형과 해시 알고리즘 정보가 들어 있습니다. 헤더는 JSON 형식으로 작성되어 있으며, 이를 Base64로 인코딩하여 JWT의 첫 부분을 이룹니다.
Payload(내용) : 토큰에 포함되는 클레임(claim) 정보가 들어 있습니다. 클레임은 사용자에 대한 정보, 토큰의 만료 시간, 발급자 등을 나타냅니다. 또한 JSON형식으로 작성되어 있으며, 이를 Base64로 인코딩하여 JWT의 두번째 부분을 이룹니다.
Signature(서명) : Header와 Payload를 합친 후, 이를 비밀 키와 함께 해싱하여 생성된 서명 부분입니다. 서명은 토큰이 유효하고 변경되지 않았음을 확인하는 데 사용됩니다. 서명은 헤더에 있는 알고리즘에 따라 생성됩니다.
이렇게 최종적으로 헤더,페이로드,서명을 합쳐 JWT를 만들고 아래와 같은 형태를 가집니다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik1vbCBSYSIsImlhdCI6MTIzNDU2fQ.xhgD0fOYXddnaS_QY2sSHWt2wxhwfB4QfNIuiRUu_Yg
이렇게 구성된 JWT를 사용하여 클라이언트와 서버 간에 안전하게 정보를 전달하고, 토큰의 유효성을 검증할 수 있습니다.
간편한 전송 : JWT는 JSON 형식을 사용하며, 이는 간결하고 가독성이 좋은 형식입니다. 따라서 JWT는 데이터를 쉽게 전송하고 처리할 수 있습니다.
인증 및 권한 부여 : JWT는 사용자의 인증 정보를 안전하게 전송할 수 있습니다. 서버에서 JWT를 생성하고 클라이언트에게 전달하면, 클라이언트는 이를 이후의 요청에서 전송하여 자신의 신원을 증명합니다. 또한, JWT 내의 클레임을 사용하여 사용자의 권한을 부여하고 관리할 수 있습니다.
보안 향상 : JWT는 분산 시스템에서 사용하기에 적합합니다. 서버 간 통신이나 서버와 클라이언트간의 통신에서 사용할 수 있으며, 독립적인 시스템 간에도 효과적으로 활용될 수 있습니다.
데이터 전송 최적화 : JWT는 헤더와 페이로드를 Base64로 인코딩하여 전송하기 때문에, 데이터 크기를 효과적으로 최소화할 수 있습니다. 그래서 대량의 데이터를 효율적으로 전송하는데 도움이 됩니다.
유연한 구조 : JWT의 구조는 헤더,페이로드,클레임의 세 부분으로 나뉘어 있습니다. 이는 클라이언트와 서버 간의 유연한 통신을 가능하게 합니다. 클레임을 추가하거나 변경하여 필요한 정보를 포함시킬 수 있습니다.