4

토큰 기반 인증 (각 클라이언트와 함께 여권/JWT를 사용하는 Node.js)을 구축 중입니다.토큰 기반 인증에서 Refesh Token 사용이 안전합니까?

사용자가 자신의 자격 증명을 입력하면 액세스 토큰을 얻습니다.이 토큰은 헤더 내의 모든 요청 (헤더 : 무기명 토큰)에서 보냅니다. (I 추측 일상에 대해) 나는 로그인 요청 메시지를 표시하지 않으

는 매번 자신의 액세스 토큰 내가 Refresh Tokens에 대해 들었어요 , 만료됩니다. 새로 고침 토큰은 만료되지 않거나 거의 만료되지 않으며 토큰을 무기한 갱신 할 수 없습니다. 액세스 토큰이 곧 만료 될 때 클라이언트는 새로 고침 토큰을 보내어 새 액세스 토큰을 가져 오기 위해 갱신 요청을 보낼 수 있습니다.

내가 몇 가지를 이해하지 못하고, 내가 뭔가를 누락 될 수 있습니다 :

  1. 얼마나 오랫동안 거실/결코 새로 고침 토큰이 짧은 생활 액세스 토큰을 갖는 보안을 파괴하지 않는 만료되지 않습니다.

  2. 쿠키는 도난 당할 수 있으며 만료 될 때까지 사용할 수 있습니다. 토큰은 짧게 살 수 있으므로 보안 성이 높습니다. 그러나 긴 수명의 새로 고침 토큰을 제공하면 토큰을 사용하면 이점을 잃게됩니다.

참고 : 나는 새로 고침 토큰이 초기 로그인시 전송되는 것을 알고, 그래서 모든 요청에 ​​스푸핑 될 두지 만, 그들은 초기 요청에 위장하는 경우가 취약하다.

답변

4

새로 고침 토큰은 액세스 토큰과 다른 경로에 표시됩니다. 액세스 토큰은 리소스 서버에만 표시되며 새로 고침 토큰은 인증 서버에만 표시됩니다. 액세스 토큰은 자체 포함될 수 있으므로 유효성을 검사하기 위해 권한 서버에 값 비싼 호출이 필요하지 않지만 손실을 줄이고 정확성을 높이기 위해 (무언가가 잘못되어도 취소 할 수는 없습니다) 단명합니다. 새로 고침 토큰은 오래 유지되며 Authorization Server 호출마다 유효성이 검사되므로 취소 될 수 있습니다. 이 둘의 조합으로 시스템이 안전합니다.

+0

나는 이해하기 시작했다고 생각합니다. 액세스 토큰은 클라이언트와 서버간에 전달되고 새로 고침 토큰은 서버와 권한 서버간에 전달됩니다. 내 서버가 자원 및 권한 부여 논리를 모두 가지고 있고 다른 권한 부여 서버에서 중계하지 않으면 어떻게 될까요? 새로 고침 토큰이 필요 없으며 클라이언트가 오래된 액세스 토큰이나 곧 만료되는 액세스 토큰을 제공하면 간단히 새 토큰을 생성하여 전달할 것입니다. 해커가 액세스 토큰을 가지고 있으면 그것을 반복적으로 갱신하여 악용 할 수 있다는 의미는 아닙니다. –

+0

새로운 액세스 토큰은 OAuth 2.0에서 호출하는 것과 같은 일종의 "권한 부여"에 기반하여 클라이언트에게만 부여되어야하며 이전 액세스 토큰의 소유를 기반으로해서는 안됩니다. 그렇지 않으면 실제로 토큰의 수명에 no 의미 –

+0

사용자가 자격 증명을 다시 입력하지 않아도 사용할 수있는 권한 부여를 알 수 있습니까? (액세스 토큰이 만료 될 때마다 로그인하라는 메시지를 피하기 위해) 새로 고침 토큰 부여 인 ... –