질문 : JWT (JSON Web Token) 만료 자동 연장
새로운 REST API에 JWT 기반 인증을 구현하고 싶습니다. 그러나 토큰에 만료가 설정되어 있으므로 자동으로 연장 할 수 있습니까? 사용자가 해당 기간에 애플리케이션을 적극적으로 사용하는 경우 X 분마다 로그인 할 필요가 없습니다. 그것은 엄청난 UX 실패입니다.
그러나 만료 기간을 연장하면 새 토큰이 생성됩니다 (이전 토큰은 만료 될 때까지 여전히 유효합니다). 그리고 각 요청 후에 새 토큰을 생성하는 것은 어리석은 것처럼 들립니다. 둘 이상의 토큰이 동시에 유효한 경우 보안 문제처럼 들립니다. 물론 블랙리스트를 사용하여 이전에 사용 된 것을 무효화 할 수 있지만 토큰을 저장해야합니다. 그리고 JWT의 장점 중 하나는 스토리지가 없다는 것입니다.
Auth0이 어떻게 해결했는지 발견했습니다. JWT 토큰뿐만 아니라 새로 고침 토큰도 사용합니다 : https://auth0.com/docs/tokens/refresh-tokens
그러나 다시 이것을 구현하려면 (Auth0없이) 새로 고침 토큰을 저장하고 만료를 유지해야합니다. 그렇다면 진정한 이점은 무엇입니까? 토큰 (JWT가 아님)이 하나만 있고 서버에 만료 기간을 유지하지 않는 이유는 무엇입니까?
다른 옵션이 있습니까? JWT를 사용하는 것이이 시나리오에 적합하지 않습니까?
답변
저는 Auth0에서 일하며 새로 고침 토큰 기능의 디자인에 참여했습니다.
그것은 모두 응용 프로그램 유형에 따라 다르며 여기에 권장되는 접근 방식이 있습니다.
토큰이 만료되기 전에 새로 고치는 것이 좋은 패턴입니다.
토큰 만료를 1 주로 설정하고 사용자가 웹 애플리케이션을 열 때마다 그리고 1 시간마다 토큰을 새로 고칩니다. 사용자가 1 주일 이상 애플리케이션을 열지 않으면 다시 로그인해야하며 이는 허용되는 웹 애플리케이션 UX입니다.
토큰을 새로 고치려면 API에 만료되지 않은 유효한 JWT를 수신하고 새 만료 필드가있는 동일한 서명 된 JWT를 반환하는 새 엔드 포인트가 필요합니다. 그런 다음 웹 응용 프로그램은 토큰을 어딘가에 저장합니다.
대부분의 기본 응용 프로그램은 한 번만 로그인합니다.
아이디어는 새로 고침 토큰이 만료되지 않으며 항상 유효한 JWT로 교환 될 수 있다는 것입니다.
만기되지 않음을 토큰의 문제는 결코 의미하지 않을 것입니다. 휴대 전화를 잃어 버리면 어떻게하나요? 따라서 사용자가 어떻게 든 식별 할 수 있어야하며 애플리케이션은 액세스를 취소하는 방법을 제공해야합니다. 우리는 장치 이름을 사용하기로 결정했습니다 (예 : "maryo의 iPad"). 그런 다음 사용자는 응용 프로그램으로 이동하여 "maryo의 iPad"에 대한 액세스를 취소 할 수 있습니다.
또 다른 방법은 특정 이벤트에 대해 새로 고침 토큰을 취소하는 것입니다. 흥미로운 이벤트는 암호를 변경하는 것입니다.
우리는 JWT가 이러한 사용 사례에 유용하지 않다고 생각하므로 무작위로 생성 된 문자열을 사용하고이를 우리 측에 저장합니다.
출처 : https://stackoverflow.com/questions/26739167/jwt-json-web-token-automatic-prolongation-of-expiration
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
웹 사이트에 "내 정보 기억"을 구현하는 가장 좋은 방법 (0) | 2021.08.26 |
---|---|
세로 스크롤이 tbody 내부에 있는 100% 너비의 HTML 테이블 (0) | 2021.08.26 |
HTML Canvas를 gif / jpg / png / pdf로 캡처 하는 방법 (0) | 2021.08.25 |
JavaScript에서 현재 날짜를 얻는 방법 (0) | 2021.08.25 |
HTML 태그 <div>와 <span>의 차이점 (0) | 2021.08.25 |