SPA でユーザーセッションを維持する
ごく最近まで、SPA では、サイレント認証と組み合わせて PKCE を使用した Authorization Code フローを用いることで、ユーザーのセッションを維持していました。ところが、Intelligent Tracking Prevention (ITP) などのブラウザーのプライバシー技術の進展により、Auth0 の にアクセスできなくなり、その結果、ユーザーは再認証を求められるようになりました。

自動再利用検出
クライアントが新しいアクセストークンを必要とする場合、リフレッシュトークンをリクエストとともに Auth0 に送信して、新しいトークンペアを取得します。Auth0 が新しいペアを発行すると、そのリクエストで使用されたリフレッシュトークンはただちに無効化されます。これにより、漏えいしたトークンによるリプレイ攻撃からアプリを保護できます。 送信者制約を強制しない場合、リプレイ攻撃が発生した際に、どのアクターが正当でどれが悪意あるものかを が判断することはできません。したがって、以前に使用されたリフレッシュトークン (すでに無効化済み) が認可サーバーに送信された場合は、直近に発行されたリフレッシュトークンもただちに無効化されることが重要です。これにより、同じトークンファミリー内のリフレッシュトークン (クライアントに対して最初に発行された元のリフレッシュトークンから派生した、すべてのリフレッシュトークン) を使って新しいアクセストークンを取得することを防ぎます。 たとえば、次のシナリオを考えてみましょう。
- 正規のクライアントは リフレッシュトークン 1 を保持しており、それが悪意のあるクライアントに漏えいまたは盗まれます。
- 正規のクライアントは リフレッシュトークン 1 を使用して、新しいリフレッシュトークン / アクセストークンのペアを取得します。
- Auth0 は リフレッシュトークン 2 / アクセストークン 2 を返します。
- その後、悪意のあるクライアントが リフレッシュトークン 1 を使ってアクセストークンを取得しようとします。Auth0 はリフレッシュトークン 1 が再利用されていることを検知し、リフレッシュトークン 2 を含むトークンファミリー全体をただちに無効化します。
- Auth0 は悪意のあるクライアントに access denied レスポンスを返します。
- アクセストークン 2 の有効期限が切れ、正規のクライアントが リフレッシュトークン 2 を使って新しいトークンペアをリクエストしようとします。Auth0 は正規のクライアントに access denied レスポンスを返します。
- 再認証が必要になります。
ferrt など) をログに記録します。これは、不審なアクティビティを検出するうえで、Auth0 の ログストリーミング 機能と組み合わせると特に有用です。
別の例として、悪意のあるクライアントが リフレッシュトークン 1 を盗み、正規のクライアントが リフレッシュトークン 1 を使おうとする前に、それを使ってアクセストークンの取得に成功するケースがあります。この場合、悪意のあるクライアントのアクセスは短期間にとどまります。これは、次の図に示すように、正規のクライアントが リフレッシュトークン 1 を使おうとした時点で リフレッシュトークン 2 (またはその後に発行された任意のリフレッシュトークン) が自動的に失効するためです。

SDK サポート
以下の SDK は、リフレッシュトークンローテーションと自動再利用検出をサポートしています。- Auth0 SPA SDK
- Flutter (Web)
- Swift (iOS) SDK
- Android SDK
- Flutter
- React Native SDK
- WPF / Winforms
- Xamarin