이 답변은 두 명의 선임 개발자 (John Brayton 및 David Jennes)의 도움으로 이루어졌습니다.
새로 고침 토큰을 사용하는 주된 이유는 공격 영역을 줄이는 것입니다.
새로 고침 키가 없다고 가정하고이 예제를 살펴 보겠습니다.
건물에는 80 개의 문이 있습니다. 모든 문은 동일한 키로 열립니다. 키는 30 분마다 변경됩니다. 30 분이 끝나면 열쇠를 키 메이커에게주고 새로운 열쇠를 얻어야합니다.
내가 해커이고 키를 얻으면 30 분이 지나면 키 메이커에게 전달하여 새 키를 얻습니다. 키 변경에 관계없이 모든 도어 를 지속적으로 열 수 있습니다 .
질문 : 30 분 동안 키에 대해 몇 개의 해킹 기회가 있었습니까? 나는 당신이 키를 사용할 때마다 80 개의 해킹 기회를 가졌습니다 (네트워크 요청을하고 자신을 식별하기 위해 액세스 토큰을 전달하는 것으로 생각하십시오). 그것은 80 배의 공격 표면입니다.
이제 동일한 예제를 살펴 보지만 이번에는 새로 고침 키가 있다고 가정하겠습니다.
건물에는 80 개의 문이 있습니다. 모든 문은 동일한 키로 열립니다. 키는 30 분마다 변경됩니다. 새 키를 얻으려면 이전 액세스 토큰을 전달할 수 없습니다. 새로 고침 키만 전달해야합니다.
내가 해커이고 키를 얻는 경우 30 분 동안 사용할 수 있지만 30 분이 지나면 키 메이커에게 키를 보내는 것은 가치가 없습니다. 내가 그렇다면, 키 메이커는이 나쁜 새로 고침 토큰이라고 말할 것입니다. 해킹을 확장하려면 택배를 키 메이커에게 해킹해야합니다. 택배에는 고유 한 키가 있습니다 (새로 고침 토큰이라고 생각).
질문 : 30 분 동안 Refresh 키에 대해 몇 개의 해킹 기회가 있었습니까? 80? 아니요. 해킹 기회는 1 회뿐이었습니다. 그 기간 동안 택배는 키 메이커와 통신합니다. 그것은 1 배의 공격 표면입니다. 키에 대해 80 개의 해킹 기회가 있었지만 30 분이 지나도 좋지 않습니다.
서버는 자격 증명 및 (일반적으로) JWT 서명을 기반으로 액세스 토큰을 확인합니다.
액세스 토큰 유출은 좋지 않지만 일단 만료되면 더 이상 공격자에게 유용하지 않습니다. 새로 고침 토큰 유출은 훨씬 더 나쁘지만 아마도 가능성이 적습니다. (새로 고침 토큰 유출 가능성이 액세스 토큰 유출 가능성보다 훨씬 낮은 지 여부는 의문의 여지가 있다고 생각합니다.)
요점은 액세스 토큰이 모든 요청에 추가되는 반면 새로 고침 토큰은 새로 고침 흐름 동안에 만 사용되므로 MITM이 토큰을 볼 가능성이 적다는 것입니다
빈도는 공격자에게 도움이됩니다. Heartbleed 와 같은 SSL의 잠재적 인 보안 결함, 클라이언트의 잠재적 인 보안 결함 및 서버의 잠재적 인 보안 결함은 모두 유출을 가능하게합니다.
또한 권한 부여 서버가 다른 클라이언트 요청을 처리하는 응용 프로그램 서버와 분리 된 경우 해당 응용 프로그램 서버에는 새로 고침 토큰이 표시되지 않습니다. 더 이상 오래 살지 않는 액세스 토큰 만 볼 수 있습니다.
구획화는 보안에 좋습니다.
마지막 으로이 멋진 답변을 참조하십시오
무슨 새로 고침 토큰이 아닙니다?
새로 고침 토큰을 통해 액세스 수준을 업데이트 / 해제하는 기능은 새로 고침 토큰을 사용하도록 선택한 부산물입니다. 그렇지 않으면 독립형 액세스 토큰이 취소되거나 만료 될 때 액세스 수준이 수정되어 사용자가 새 토큰을 얻을 수 있습니다