この答えは、2人の上級開発者(John BraytonとDavid Jennes)の助けによってまとめられました。
更新トークンを使用する主な理由は、攻撃対象を減らすことです。
更新キーがないと仮定して、この例を見てみましょう:
建物には80のドアがあります。すべてのドアは同じ鍵で開かれます。キーは30分ごとに変更されます。30分が経過したら、古いキーをキーメーカーに渡して新しいキーを取得する必要があります。
私がハッカーで鍵を入手したら、30分が経過したら、それを鍵メーカーに宅配して新しい鍵を入手します。キーの変更に関係なく、すべてのドアを継続的に開くことができます。
質問:30分間で、キーに対してハッキングの機会がいくつありましたか?キーを使用するたびに、80回のハッキングの機会がありました(これは、ネットワークリクエストを作成し、自分を識別するためにアクセストークンを渡すと考えてください)。つまり、80Xの攻撃面です。
今度は同じ例を見てみましょうが、今回は更新キーがあると仮定しましょう。
建物には80のドアがあります。すべてのドアは同じ鍵で開かれます。キーは30分ごとに変更されます。新しいキーを取得するために、古いアクセストークンを渡すことができません。更新キーのみを渡す必要があります。
私がハッカーであなたの鍵を手に入れたら、30分間使用できますが、30分の終わりに鍵をキーメーカーに送信しても意味がありません。もしそうなら、キーメーカーはこの悪いリフレッシュトークンを言うだけです。私のハックを拡張できるようにするには、宅配業者をキーメーカーにハックする必要があります。クーリエには別個のキーがあります(これを更新トークンと考えてください)。
質問:30分間で、更新キーに対してハッキングの機会がいくつありましたか?80?いいえ。ハッキングの機会は1回しかありませんでした。その間、クーリエはキーメーカーと通信します。つまり、これは1X攻撃面です。鍵に対して80回のハッキングの機会がありましたが、30分後には良くありません。
サーバーは、資格情報と(通常)JWTの署名に基づいてアクセストークンを検証します。
アクセストークンの漏えいは悪いですが、有効期限が切れると攻撃者にとってもはや役に立ちません。更新トークンの漏えいははるかに悪いですが、おそらくその可能性は低くなります。(リフレッシュトークンのリークの可能性がアクセストークンのリークの可能性よりもはるかに低いかどうかは疑問の余地があると思いますが、それは考え方です。)
ポイントは、アクセストークンはすべてのリクエストに追加されますが、更新トークンは更新フロー中にのみ使用されるため、MITMがトークンを見る可能性が低くなります。
頻度は攻撃者を助けます。ハートブリードのような、SSLの潜在的なセキュリティ欠陥、クライアントの潜在的なセキュリティ欠陥、およびサーバーの潜在的なセキュリティ欠陥はすべてリークを可能にします。
さらに、承認サーバーが他のクライアント要求を処理するアプリケーションサーバーから分離されている場合、そのアプリケーションサーバーには更新トークンが表示されません。ずっと長く存続しないアクセストークンのみが表示されます。
区画化はセキュリティに適しています。
最後に、この素晴らしい答えを見てください
どのような更新トークンは関係ありませんか?
更新トークンを使用してアクセスレベルを更新/取り消す機能は、更新トークンを使用することを選択した場合の副産物です。それ以外の場合、スタンドアロンアクセストークンは、期限切れになり、ユーザーが新しいトークンを取得したときに、取り消されたり、アクセスレベルが変更されたりする可能性があります。