본문 바로가기

web

web - JWT

 

1. jwt란?

 

JSON 웹 토큰(JWT)은 웹에서 정보를 안전하게 전송하는 방법이다. 웹 응용 프로그램에서 인증 및 권한 부여를 위해 종종 사용된다.
JWT는 헤더, 페이로드, 서명의 세 부분으로 구성된다. 헤더는 일반적으로 토큰의 유형인 JWT와 HMAC SHA256 또는 RSA와 같은 서명 알고리즘의 두 부분으로 구성된다.

 

서명은 JWT의 발신인이 누구인지 확인하고 메시지가 도중에 변경되지 않았는지 확인하는 데 사용된다.
사용자가 응용프로그램에 로그인하면 응용프로그램은 사용자 이름 및 만료 시간과 같은 사용자에 대한 정보를 포함하는 JWT를 생성한다. 그런 다음 응용 프로그램은 JWT를 일반적으로 HTTP 전용의 안전한 쿠키로 사용자에게 전송된다. 사용자가 응용프로그램에 요청하면 응용프로그램은 JWT를 확인하여 사용자가 인증되었으며 요청된 리소스에 액세스하는 데 필요한 권한을 가지고 있는지 확인한다.
JWT는 서버가 사용자의 세션을 추적할 필요가 없고 확장가능성이 크다.

 

2. 사용자가 jwt를 받는 이유

 

서버 애플리케이션은 JWT를 생성하여 HTTP 전용의 안전한 쿠키 형태로 사용자에게 전송한다. 사용자가 JWT를 수신하면 서버에 대한 모든 후속 요청의 헤더에 JWT를 포함한다.
사용자가 JWT를 받는 이유는 서버가 이후 요청 시 사용자를 인증하는 역할을 하기 때문이다. JWT에는 사용자 이름 및 만료 시간과 같은 사용자에 대한 정보가 포함되어 있다. 사용자가 서버에 요청할 때 서버는 JWT를 확인하여 사용자가 인증되었으며 요청된 리소스에 액세스하는 데 필요한 권한을 가지고 있는지 확인할 수 있다.


즉, JWT는 사용자가 자신의 신원과 접근권을 증명하기 위해 서버에 제시할 수 있는 일종의 '티켓' 역할을 한다. 서버가 JWT를 신뢰할 수 있는 이유는 JWT가 서버 자체에서 생성되었기 때문이며 서명을 사용하여 확인할 수 있기 때문이다.
JWT는 서버와 클라이언트가 비밀키를 공유하는 대칭 알고리즘(HS256, HS512)이나 서버가 개인키를 보유하고 클라이언트가 공개키를 보유하는 비대칭 알고리즘(RS256, ES256)을 사용하여 서명할 수 있다는 점에 주목할 필요가 있다.

 

3. 사용자 관점에서 jwt

 

사용자가 서버에 요청할 때 JWT는 일반적으로 요청의 헤더에 포함된다. 사용자의 브라우저는 JWT가 여전히 유효한 한 서버에 대한 모든 후속 요청의 헤더에 JWT를 자동으로 포함한다.
JWT는 일반적으로 HTTP 전용의 안전한 쿠키로 사용자의 브라우저에 저장된다. 즉, JWT는 브라우저에서만 액세스할 수 있으며 사용자의 장치에서 실행되는 자바스크립트 코드에서는 액세스할 수 없다. 이것은 JWT가 악의적인 행위자들에 의해 도둑맞지 않도록 보호하는 데 도움이 된다.


JWT는 로컬 스토리지나 세션 스토리지에도 저장할 수 있지만, HTTP 전용의 안전한 쿠키를 사용하는 것이 좋다. 이 쿠키는 보안을 강화하기 때문이다.
서버는 사용자로부터 요청을 받으면 JWT가 유효하고 만료되지 않았는지 확인한다.

JWT가 유효한 경우, 서버는 사용자가 요청한 리소스에 액세스할 수 있도록 허용한다. JWT가 잘못되었거나 만료된 경우, 서버는 사용자에게 적절한 오류 메시지를 반환한다.

 

4. 결론 및 jwt를 사용하는 이유

 

JWT는 사용자 인증에 필요한 모든 정보를 포함하는 자체 포함 토큰의 일종이다. JWT는 일반적으로 웹 애플리케이션에서 인증 및 권한 부여에 사용된다. JWT는 서버에서 생성되어 사용자에게 전송된다. 사용자가 애플리케이션에 요청하면 JWT가 서버로 다시 전송된다.

그런 다음 서버는 JWT를 사용하여 사용자가 인증되었는지 확인하고 요청된 리소스에 액세스하는 데 필요한 권한을 가질 수 있다.


JWT는 독립적이고 stateless하며 확장하기 쉽기 때문에 웹 사용자 인증에 대한 좋은 선택이다. 기존 세션에 비해 안전하고 가벼우며 토큰보다 안전하지만 구현에 더 많은 리소스가 필요할 수 있다.