Catchdave によって提供されたディスカッションへのリンクには 、Dick Hardt によって作成された別の有効なポイント (元のリンク切れ)があり、上記の内容に加えて、ここで言及する価値があると思います。
私のリフレッシュ トークンの記憶は、セキュリティと失効のためのものでした。<...>
取り消し:アクセス トークンが自己完結型の場合、新しいアクセス トークンを発行しないことで承認を取り消すことができます。リソースは、アクセス トークンが有効かどうかを確認するために承認サーバーにクエリを実行する必要はありません。これにより、アクセス トークンの検証が簡素化され、複数の承認サーバーのスケーリングとサポートが容易になります。アクセス トークンが有効である時間枠がありますが、承認は取り消されます。
実際、Resource Server と Authorization Server が同じエンティティであり、ユーザーとそれらのいずれかの間の接続が (通常) 同等に安全である状況では、リフレッシュ トークンをアクセス トークンから分離しておくことはあまり意味がありません。
ただし、引用で述べたように、リフレッシュ トークンのもう 1 つの役割は、システムのスケーラビリティを維持しながら、ユーザーがいつでもアクセス トークンを取り消すことができるようにすることです (たとえば、プロファイルの Web インターフェイスを介して)。 .
一般に、トークンは、サーバーのデータベース内の特定のレコードを指すランダムな識別子にするか、すべての情報をそれ自体に含めることができます (確かに、この情報はMACなどで署名する必要があります)。
有効期間の長いアクセス トークンを使用するシステムのしくみ
サーバーは、トークンを発行することにより、事前に定義された範囲のセット内でクライアントがユーザーのデータにアクセスできるようにします。トークンを取り消し可能な状態に保ちたいので、「取り消された」というフラグが設定または設定解除された状態でトークンをデータベースに保存する必要があります (そうでなければ、自己完結型のトークンでどのようにそれを行いますか? len(users) x len(registered clients) x len(scopes combination)
) . その後、すべての API リクエストがデータベースにヒットする必要があります。O(1) を実行するこのようなデータベースに対してクエリを実行するのは非常に簡単ですが、単一障害点自体がシステムのスケーラビリティとパフォーマンスに悪影響を及ぼす可能性があります。
有効期間の長いリフレッシュ トークンと有効期間の短いアクセス トークンを使用するシステムのしくみ
ここでは、2 つのキーを発行します。データベース内の対応するレコードを含むランダム リフレッシュ トークンと、とりわけ有効期限タイムスタンプ フィールドを含む、署名済みの自己完結型アクセス トークンです。
アクセス トークンは自己完結型であるため、その有効性を確認するためにデータベースにアクセスする必要はまったくありません。トークンをデコードし、署名とタイムスタンプを検証するだけです。
それにもかかわらず、更新トークンのデータベースを維持する必要がありますが、このデータベースへのリクエストの数は、一般にアクセス トークンの寿命によって定義されます (寿命が長くなるほど、アクセス レートは低くなります)。
特定のユーザーからのクライアントのアクセスを取り消すには、対応するリフレッシュ トークンを「取り消された」としてマークし (または完全に削除し)、新しいアクセス トークンの発行を停止する必要があります。リフレッシュ トークンが取り消された期間があることは明らかですが、そのアクセス トークンはまだ有効な場合があります。
トレードオフ
リフレッシュ トークンは、アクセス トークン データベースの SPoF (単一障害点) を部分的に排除しますが、いくつかの明らかな欠点があります。
窓"。「ユーザーがアクセスを取り消す」イベントと「アクセスが取り消されることが保証される」イベントの間の時間枠。
クライアント ロジックの複雑さ。
リフレッシュトークンなし
- アクセス トークンを使用して API リクエストを送信する
- アクセス トークンが無効な場合は失敗し、ユーザーに再認証を求める
リフレッシュトークン付き
- アクセス トークンを使用して API リクエストを送信する
- アクセス トークンが無効な場合は、リフレッシュ トークンを使用して更新してみてください
- 更新リクエストがパスした場合は、アクセス トークンを更新し、最初の API リクエストを再送信します
- 更新リクエストが失敗した場合、ユーザーに再認証を求める
この回答が理にかなっていて、誰かがより思慮深い決定を下すのに役立つことを願っています. また、github や foursquare などの有名な OAuth2 プロバイダーの中には、リフレッシュ トークンのないプロトコルを採用しているものもあり、それに満足しているように見えることにも注意してください。