Community

JWT(JSON Web Token): 인증 프로세스

JWT(JSON Web Token)은 인증에 필요한 정보들을 암호화하지 않고, 인코딩된 JSON 토큰입니다. 암호화와 달리 인코딩은 원래의 정보를 복원 가능하므로, JWT의 내용은 제3자에게 완전한 비밀이 아닙니다. 그렇다면 서버에서는 어떻게 JWT가 유효한지 식별할 수 있을까요? JWT는 헤더, 페이로드(Payload), 서명(Signature) 이렇게 3가지 섹션으로 구성되어 있습니다. 헤더에는 사용할 해시 알고리즘의 종류가 담겨있습니다. 이 해시 알고리즘을 이용해서, 헤더(Base64Url 인코딩) + 페이로드(Base64Url 인코딩) + 비밀키를 이용해 해싱 한 값을 서명에 담습니다. 서버에서는 별도로 관리하는 비밀키가 있기 때문에, (헤더 + 페이로드 + 비밀키)의 해시 값이 서명과 일치하는지 여부를 확인할 수 있습니다. 헤더와 페이로드는 단순 인코딩된 값이기 때문에 제3자가 복호화 및 조작할 수는 있지만, 서명에 필요한 비밀키는 서버 측에서만 알고 있기 때문에, 제3자가 같은 서명값을 만들어내는 것은 어렵습니다. 따라서 이 서명값을 통해 토큰이 위조나 변조가 되었는지를 확인할 수 있습니다. 따라서 서버는 클라이언트가 헤더에 담아서 보낸 JWT가 내 서버에서 발행한 토큰인지 일치 여부를 확인하여 일치한다면 인증을 통과시켜주고 페이로드에 들어있는 유저의 정보를 클라이언트에게 돌려줍니다. 이러한 인증 방식 때문에, JWT는 인증을 위한 별도의 저장소(DB)가 필요 없습니다. 토큰 자체에 유저에 대한 정보가 들어있기 때문에, DB를 조회해서 유저 등급을 얻지 않아도 바로 원하는 정보를 얻을 수 있습니다.

알림

알림이 없습니다