나는 토큰 기반 권한 부여에 상당히 익숙하다. 나는 사용자 정의 만료/토큰 리프레시 스키마의 결함을 찾으려고 노력하고있다.JsonWebToken : 활동 기반 만료 vs 시간 만료
Express API에 기본 JWT auth 설정이 있습니다. JWT 만료를 1 시간으로 설정합니다. 그러나 JWT는 토큰이 발행 된 시간과 관련하여 토큰 만기를 검사합니다. 각 성공적인 API 호출 후에 만료 시간이 재설정되는 것을 선호합니다. 사용자가 한 시간 이상 앱을 적극적으로 사용하고 있다면 토큰을 새로 고침하기 위해 다시 로그인하지 않아도됩니다.
손, 나는 1 시간 이상 반응이 없다면 토큰이 만료되기를 원한다. 모든 성공적인 API 요청, 문제의 새로운 JWT 동안
을하고 사용자 정의 응답 헤더에 보내
나는 다음과 같은 방법으로 올라와있다. 내 클라이언트 측 코드는 이 JWT 응답 헤더를 확인하고 해당 값을 새로운 기본 인증 요청 헤더로 사용합니다. 따라서 사용자로부터 1 시간 이상 동안 API 요청이 없으면 토큰이 만료되고 은 새로 고쳐지지 않습니다. 그런 다음 로그인해야합니다. 또한 토큰의 원래 발급 날짜 (로그인 인증의 타임 스탬프)가 저장되어 24 시간 후에 토큰의 "유효 기간 만료"가 적용됩니다.
이것은 매우 직관적이며 합리적으로 안전하지만 JWT 연구에서는 언급되지 않았습니다. 동일한 목표를 달성하기위한 더 좋은 방법이 있습니까? 이 접근 방식에서 중요한 보안 허점을 놓치고 있습니까?
는 UPDATE :는 약간의 시간이 생각 후에, 나는 이것에 문제가 토큰 만료에 의해 방해 할 수없는 공격을 재생하기 위해 문을 여는 것을 깨달았다. 따라서 하드 만료는 절대적으로 만료되어야합니다. 하드 만료는 최근 사용자 활동에 관계없이 발행일 이후 어느 순간에 토큰을 무효화합니다. 이 시나리오에 대한 내 대답을 확인할 수 있습니다 여기에
이전 토큰의 유효성을 기반으로 새 토큰을 발행합니까? 그 외에도 클라이언트 코드가 약간 어색 해지면 주요 보안 문제는 보이지 않습니다. 분명히 새 토큰을 발행하는 것은 무료가 아니므로 API를 호출 할 때 성능 저하를 피할 수 있습니다. 또한 API 코드에서 발행 코드를 분리 할 수 없습니다. OAuth 2.0은 새로 고침 토큰을 사용하여 만료 된 발행 된 액세스 토큰을 갱신합니다. – MvdD
@ user18044 - 예, 기존 토큰의 유효성을 기반으로 새 토큰을 발행합니다. – rgwozdz