Q. JWT에 대해 설명해주실 수 있을까요? 구체적으로 JWT를 어디서 처리하는지, 어떠한 방식으로 검증하는지, 재발급 방식과 주기는 어떻게 처리하는지, 다른 API 서비스 호출 시 어떻게 잡아서 인증 처리하는지 말씀해주시면 좋습니다.
JWT는 정보를 안전하게 전달하기 위한 토큰입니다. JWT는 Json Web Token의 약자로 인증에 필요한 정보들을 암호화시킨 토큰이다. 세션/쿠키 방식과 유사하게 사용자는 Access Token(JWT Token)을 HTTP header에 실어 서버로 보내게 된다. 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요없다는 장점이 있다.
구성: 헤더(알고리즘 및 유형), 페이로드(클레임 정보), 서명(무결성 확인)으로 구성됩니다.
처리: 사용자가 로그인하면 서버에서 JWT를 생성하여 반환합니다.
검증: 클라이언트는 요청 시 JWT를 서버에 제출하고, 서버는 유효성을 검증하여 요청을 수락하거나 거부합니다.
재발급: JWT의 만료 기간이 지나면, 클라이언트는 새로운 토큰을 요청하거나 서버에서 자동으로 재발급합니다.
주기 관리: 서버는 토큰의 만료 기간을 확인하고, 만료되면 새 토큰을 발급하여 사용자 세션을 유지합니다.
인증: 다른 API 서비스 호출 시 JWT는 사용자 인증을 위해 사용됩니다. 사용자가 로그인 후 JWT를 받으면, 이 토큰은 API 서비스에 대한 인증 수단으로 사용됩니다.
클라이언트는 API를 호출할 때, HTTP 요청의 헤더에 JWT를 포함시킵니다. 주로 Authorization 헤더에 Bearer 스키마를 사용하여 JWT를 전달합니다.
JWT 검증: API 서버는 받은 JWT를 검증합니다. 이 과정에서 서버는 다음을 확인합니다.
토큰의 유효성: 서명이 올바른지 확인하고 토큰이 만료되지 않았는지 확인합니다.
사용자 권한 및 클레임: 토큰의 페이로드에서 사용자의 권한과 기타 정보를 확인하여 요청을 처리합니다.
인증 및 권한 부여: JWT가 유효하고 사용자가 인증되면 API 서버는 해당 요청을 수행하고 사용자에게 권한이 있는 데이터 또는 서비스를 제공합니다.