새로 고침 토큰은 적어도 두 가지 용도로 사용됩니다. 첫째, 새로 고침 토큰은 OAuth2 클라이언트가 사용자로부터 데이터에 대한 액세스 권한을 이미 받았음을 나타내는 일종의 '증거' 이므로 사용자가 전체 OAuth2 흐름을 거치지 않고도 새 액세스 토큰을 다시 요청할 수 있습니다. 둘째, 오래 지속되는 액세스 토큰과 비교할 때 전체 보안 흐름을 증가시키는 데 도움이됩니다. 이 두 가지 사항에 대해 좀 더 자세히 다룰 것입니다.
사용자를 괴롭히지 않는 수단으로 토큰 새로 고침
첫 번째 목적에 대해 예를 들어 이야기합시다. 사용자 인 귀하가 YouTube 계정 데이터와 상호 작용하기를 원하는 타사 클라이언트 웹 애플리케이션을 사용하고 있다고 가정합니다. 클라이언트 애플리케이션에 YouTube 데이터를 사용할 수있는 권한을 부여한 후 클라이언트 앱에서 다시 권한을 요청하도록 하시겠습니까?YouTube 토큰이 언제 만료됩니까? YouTube 토큰 만료 시간이 5 분과 같이 매우 낮 으면 어떻게됩니까? 클라이언트 응용 프로그램이 최소 5 분마다 사용자의 허가를 요청하는 것은 약간 짜증날 것입니다! OAuth2가이 '문제'에 대해 제안하는 솔루션은 새로 고침 토큰입니다. 새로 고침 토큰을 사용하면 액세스 토큰이 일시적으로 유지 될 수 있으며 (액세스 토큰이 유출되거나 도난당한 경우 바람직 함) 새로 고침 토큰은 오래 지속되어 클라이언트가 새 액세스를 얻을 수 있습니다. 사용자의 허가없이 (다시) 만료 될 때 토큰.
그런데 왜 새로 고침 토큰일까요? 요점이 권한 요청으로 사용자를 괴롭히지 않는 것이라면 왜 클라이언트는 "Hey, Authorization Server, I want another access token. Now!"라고 말할 수 없습니까? 또는 "Hey Authorization Server, 여기에 만료 된 토큰이 있습니다. 새 토큰을주세요!". 새로 고침 토큰은 클라이언트가 원래 시점에 사용자가 액세스 권한을 부여 받았다는 일종의 "증거"역할을합니다. 이 "증명"은 Authorization Server에 의해 디지털 서명 된 새로 고침 토큰의 형태입니다. 클라이언트가 새로 고침 토큰을 제시함으로써 권한 부여 서버는 클라이언트가 과거 어느 시점에 사용자로부터 권한을 받았는지 확인할 수 있으며 클라이언트는 사용자에게 다시 메시지를 표시하지 않아도됩니다.
보안 강화 수단으로 토큰 새로 고침
그러나 이렇게하면 "새로 고침 토큰이 유출되거나 도난 당하거나 사용자의 요청에 따라 제거하지 않는 악성 클라이언트 응용 프로그램에 의해 단순히 유지되면 어떻게됩니까?"라는 질문이 제기됩니다. 갱신 토큰을 사용하여 유효한 액세스 토큰을 무기한 (또는 만료 될 때까지) 얻습니까?이 질문은 더 안전한 흐름에 기여하는 갱신 토큰의 두 번째 목적에 대해 논의하게합니다.
액세스 토큰에서 발생하는 문제는 일단 획득하면 리소스 서버 (예 : YouTube)에만 제공된다는 것입니다. 따라서 액세스 토큰이 도난 당하거나 손상된 경우 리소스 서버에 해당 토큰을 신뢰하지 않도록 어떻게 알릴까요? 글쎄, 당신은 정말 할 수 없습니다. 이를 수행하는 유일한 방법은 권한 부여 서버에서 개인 서명 키 (처음에 토큰에 서명 한 키)를 변경하는 것입니다. 나는 이것이 불편하다고 생각하며 어떤 경우에는 (Auth0과 같은) 지원되지 않습니다.
반면에 새로 고침 토큰은 권한 부여 서버에 자주 제공되어야하므로 토큰이 손상 될 경우 새로 고침 토큰을 전체적으로 취소하거나 거부하고 서명 키를 변경할 필요가 없습니다.