SPAでユーザーセッションを維持する
ごく最近まで、SPAは、PKCEを使った認可コードフローとサイレント認証を併せて使用することによって、ユーザーのセッションを維持していました。Intelligent Tracking Prevention(ITP)など、ブラウザーのプライバシー技術における最近の発展により、Auth0のセッションCookieへのアクセスが妨げられるため、ユーザーの再認証が必要になっています。

再利用の自動検出
クライアントは、新しいアクセストークンが必要になると、新しいトークンのペアを取得するために、Auth0へ要求を添えてリフレッシュトークンを送信します。Auth0が新しいトークンのペアを発行すると、要求に使用されたリフレッシュトークンが即座に失効します。こうすることで、トークンの侵害によって起きるリプレイ攻撃からアプリを保護します。 sender-constraintを実現させないのであれば、リプレイ攻撃の際に、認可サーバーが正当な行為者と悪意のある行為者を区別することは不可能です。そのため、以前に使用されたリフレッシュトークン(すでに失効済み)が認可サーバーへ送信されるたら、発行されたばかりの最新のリフレッシュトークンでさえ即座に失効させることが重要です。これによって、同じトークンファミリー(クライアントに対して発行されたオリジナルのリフレッシュトークンから派生したすべてのリフレッシュトークン)のあらゆるリフレッシュトークンが、新しいアクセストークンの取得に使用されることを防ぎます。 たとえば、以下のシナリオを考えてみてください。
- 正当なクライアントにリフレッシュトークン1 があり、それが漏洩したか、悪意のあるクライアントに盗まれました。
- 正当なクライアントがリフレッシュトークン1 を使用して、新しいリフレッシュトークンとアクセストークンのペアを取得します。
- Auth0がリフレッシュトークン2とアクセストークン2 を返します。
- 悪意のあるクライアントがリフレッシュトークン1 を使用してアクセストークンを取得しようとします。Auth0はリフレッシュトークン1が再利用されたことを認識し、即座にリフレッシュトークン2 を含む関連のリフレッシュトークンを無効にします。
- Auth0が悪意のあるクライアントにアクセス拒否の応答を返します。
- アクセストークン2 が失効したため、正当なクライアントがリフレッシュトークン2 を使用して新しいトークンのペアを要求します。Auth0が正当なクライアントにアクセス拒否の応答を返します。
- 再認証が必要になります。
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