스택큐힙리스트

JWT (JSON 웹 토큰) 만료 일자의 자동 연장 본문

카테고리 없음

JWT (JSON 웹 토큰) 만료 일자의 자동 연장

스택큐힙리스트 2023. 11. 29. 00:02
반응형

우리의 새로운 REST API에 JWT 기반 인증을 구현하고 싶습니다. 하지만 토큰에 유효기간이 설정되어 있기 때문에 자동으로 연장할 수 있을까요? 사용자가 일정 기간 동안 애플리케이션을 활발하게 사용 중이라면 X 분마다 로그인해야하는 경우를 원하지 않습니다. 그렇게 된다면 사용자 경험에 큰 실패가 발생합니다.


하지만 만료 기간을 연장하면 새로운 토큰이 생성됩니다 (그리고 이전 토큰은 만료될 때까지 여전히 유효합니다). 그리고 각 요청 후에 새로운 토큰을 생성하는 것은 나에게 어리석게 들립니다. 동일한 시간에 여러 토큰이 유효한 보안 문제처럼 들립니다. 물론 검정 목록을 사용하여 이전에 사용된 토큰을 무효화 할 수는 있지만, 토큰을 저장해야합니다. 그리고 JWT의 이점 중 하나는 저장이 없다는 것입니다.


Auth0이 어떻게 해결했는지 찾아보았습니다. 그들은 JWT 토큰뿐만 아니라 갱신 토큰도 사용합니다:
https://auth0.com/docs/tokens/refresh-tokens

그러나 다시 말해서, 이를 구현하려면 (Auth0 없이) 갱신 토큰을 저장하고 만료를 유지해야 합니다. 그렇다면 실질적인 이점이 무엇인가요? 왜 JWT가 아닌 하나의 토큰만을 사용하고 서버에서 만료를 유지하지 않을까요?


다른 옵션이 있을까요? 이 시나리오에는 JWT를 사용하는 것이 적합하지 않을까요?

답변 1

나는 Auth0에서 일하고 리프레시 토큰 기능의 설계에 참여했습니다.


이 모든 것은 애플리케이션의 종류에 따라 달라집니다. 여기에는 우리의 권장 접근 방식이 있습니다.


웹 애플리케이션


좋은 방법은 토큰이 만료되기 전에 토큰을 새로고침하는 것입니다.


토큰 만료 시간을 일주일로 설정하고 사용자가 웹 애플리케이션을 열 때마다 토큰을 1시간마다 새로 고칩니다. 사용자가 일주일 이상 애플리케이션을 열지 않으면 다시 로그인해야 하며 이것은 허용 가능한 웹 애플리케이션 UX입니다.


토큰을 새로고침하려면 API에는 유효하고 만료되지 않은 JWT를 받아서 동일한 서명된 JWT를 새로운 만료 필드와 함께 반환하는 새로운 엔드포인트가 필요합니다. 그런 다음 웹 애플리케이션은 토큰을 어딘가에 저장합니다.


모바일/네이티브 애플리케이션


대부분의 네이티브 애플리케이션은 한 번만 로그인합니다.


아이디어는 리프레시 토큰이 만료되지 않고 항상 유효한 JWT로 교환될 수 있다는 것입니다.

토큰이 만료되지 않으면 문제가 발생합니다. '절대로'라는 말은 절대로 그렇다는 의미입니다. 핸드폰을 잃어버리면 어떻게 할까요? 따라서 사용자가 어떤 식으로 식별할 수 있으며, 애플리케이션에서 액세스를 취소할 수 있는 방법이 제공되어야 합니다. 우리는 기기의 이름, 예를 들어 maryo의 iPad을 사용하기로 결정했습니다. 그러면 사용자는 애플리케이션으로 가서 maryo의 iPad에 대한 액세스를 취소할 수 있습니다.


다른 접근 방법은 특정 이벤트에서 새로 고침 토큰을 취소하는 것입니다. 흥미로운 이벤트로는 비밀번호 변경이 있습니다.


우리는 이러한 사용 사례에 대해서 JWT는 유용하지 않으므로, 무작위로 생성된 문자열을 사용하고 우리 쪽에 저장합니다.

답변 2

JWT (JSON Web Token)은 인증 및 권한 부여를 위해 널리 사용되는 현대적인 보안 기술입니다. 이 토큰은 클라이언트-서버 통신에서 사용되며, 인증된 사용자를 식별하고 정보를 안전하게 전달하는 데 도움을 줍니다. JWT는 지속적으로 발전하여 사용되고 있으며, 이 글에서는 JWT 만료 시 자동으로 연장되는 기능에 대해 다룰 것입니다.
JWT를 사용하면 사용자는 로그인 정보를 서버에 전달하고 서버는 해당 정보를 사용하여 사용자를 식별합니다. JWT는 토큰 자체에 사용자 정보를 포함하고 있으며, 이를 통해 서버는 토큰을 확인함으로써 효율적으로 인증 작업을 수행할 수 있습니다. 이는 서버 측에서 추가적인 데이터베이스 조회 없이도 사용자를 신속하게 인증할 수 있는 이점을 제공합니다.
JWT는 암호화되어 있어 위변조 방지가 가능합니다. 따라서 클라이언트가 토큰을 수정해도 서버에서는 검증에 실패하여 인증되지 않은 토큰으로 처리됩니다. 이러한 보안 기능은 JWT의 안전성을 크게 향상시킵니다.
하지만 JWT의 단점 중 하나는 토큰의 만료 시간을 지정해야 한다는 것입니다. 이렇게 만료 시간을 지정하면 클라이언트 토큰이 시간이 지난 후에는 더 이상 유효하지 않게 됩니다. 이는 일시적으로 서비스를 사용하지 않는 동안에도 토큰이 자동으로 만료되는 것을 의미합니다.
그러나 JWT의 최신 버전에는 만료 시간 자동 연장 기능이 추가되어 이 단점을 극복하고자 합니다. 이 기능은 토큰이 만료되기 전에 서버가 자동으로 토큰의 만료 시간을 연장하는 것을 의미합니다. 이를 통해 사용자는 지속적으로 서비스를 이용하며 새로운 토큰을 발급받을 필요없이 편리하게 작업할 수 있습니다.
만료 시간 자동 연장 기능은 클라이언트가 서버에 요청을 보낼 때마다 토큰이 갱신되도록 구현됩니다. 서버는 요청을 받을 때마다 토큰의 만료 시간을 연장하고, 변경된 토큰을 클라이언트에게 반환합니다. 이러한 과정은 사용자가 서비스를 지속적으로 이용하는 동안 인증 프로세스를 자동화하여 사용의 편의성을 제공합니다.
JWT의 자동 연장 기능은 사용자 경험을 향상시키는 데 중요한 역할을 합니다. 만료 시간을 갱신하는 과정에서 사용자는 더 이상 로그인 절차를 거치거나 새로운 토큰을 받을 필요가 없으므로 중단 없이 서비스를 계속 이용할 수 있습니다. 이는 사용성과 효율성을 동시에 충족시키는 것입니다.
요약하자면, JWT의 자동 연장 기능은 토큰의 만료 시간을 자동으로 연장하여 사용자가 서비스를 지속적으로 이용할 수 있도록 도와주는 현대적인 보안 기술입니다. 이 기능은 사용자 경험 향상과 서비스의 효율성 향상을 위해 중요한 요소입니다. JWT를 사용하는 기업 및 개발자들은 이러한 기능을 통해 보안과 편의성을 동시에 제공할 수 있습니다.

반응형
Comments