prompt=none パラメーターをサポートしており、これによりアプリケーションは、 がユーザーとのやり取り (認証、同意、または など) を一切表示してはならないことを示せます。Auth0 は、要求されたレスポンスをアプリケーションに返すか、ユーザーがまだ認証されていない場合、または続行する前に何らかの同意や確認が必要な場合はエラーを返します。
SPA で Implicit Flow を使用すると、明示的な対策が必要となるセキュリティ上の課題が生じます。SPA でセッションを更新するには、Silent Authentication とあわせて Authorization Code Flow with PKCE を使用できます。
ブラウザーにおけるユーザープライバシー保護機能の最近の進展により、サードパーティ Cookie へのアクセスが妨げられ、ユーザー体験に悪影響が及んでいます。そのため、ブラウザーベースのフローでは Refresh Tokenのローテーション を使用する必要があります。これにより、SPA でリフレッシュトークンを安全に使用できるようになると同時に、ITP のようなブラウザープライバシー技術による UX の中断を招くことなく、エンドユーザーはリソースへシームレスにアクセスできます。
サイレント認証リクエストを開始する
/authorize エンドポイント にリダイレクトする際に、prompt=none パラメーターを追加します。 (認証リクエストの各パラメーターは、アプリの要件に応じて異なります。)
例えば:
prompt=none パラメーターを指定すると、Auth0 は指定された response_mode を使用して、成功またはエラーのいずれかの結果を、指定された redirect_uri (コールバック URL) に即座に返します。
該当する rules は、サイレント認証プロセスの一環として実行されます。
レスポンスモード
response_mode パラメーターは、Auth0 が認可レスポンスをアプリケーションにどのように返すかを決定します。サイレント認証では、次を使用できます。
web_message を使用すると、Auth0 は非表示の iframe 内に HTML ページを表示し、HTML5 Web Messaging API を使って結果をアプリケーションに返します。これにより、ページのリダイレクトをユーザーに見せることなく、状態を失わずにサイレント認証を行えます。
response_mode=web_message を使用するには、アプリケーションの URL を アプリケーション設定 の Allowed Web Origins フィールドに追加する必要があります。すべてのレスポンスモードの詳細については、OAuth 2.0 Authorization Framework を参照してください。認証成功時のレスポンス
response_mode によって異なります。
- web_message
- fragment
- query
Authorization Code Flow with PKCE (アプリケーション (または SDK) はこのメッセージを待ち受け、コードをトークンと交換します。ユーザーに有効なセッションがない場合は、Auth0 は代わりにエラーを post します。
response_type=code) で response_mode=web_message を使用する場合、Auth0 は認可コードをアプリケーションに post する HTML ページを返します。prompt=none パラメータを指定せずに通常どおりログインした場合と形式は同じです。違いは、prompt=none を使用すると、ユーザーの操作なしにレスポンスが即座に返される点だけです。
エラーレスポンス
response_mode を使ってエラーを返します。リダイレクトベースのモード (fragment または query) では:
web_message モードでは、上記の例のように、エラーは postMessage() を介して送信されます。
ERROR_CODE に指定できる値は、OpenID Connect specification で定義されています。
これらのエラーのいずれかが返された場合、認証するには、
prompt=none パラメーターを付けずにユーザーを Auth0 のログインページにリダイレクトする必要があります。
期限切れのトークンを更新する
checkSession メソッド は、SPA 向けに response_mode=web_message を組み合わせたサイレントトークンリクエストを使用し、リクエストが非表示の iframe 内で行われるようにします。SPA では、Auth0.js が結果 (トークンまたはエラーコード) を処理し、その情報をアプリケーションが指定したコールバック関数に渡します。これにより、UX を損なうことなく処理できるため、ページの再読み込みや state の喪失は発生しません。
Access Token の有効期限
- Auth0 から返される
expires_inレスポンスパラメータを確認する。 - 有効期限自体は無視する。その代わり、API がアプリケーションからのリクエストを拒否した場合 (401 など) に Access Token を更新する。
expires_in パラメータは、認証の成功後にハッシュパラメータとして Auth0 から返されます。Authorization Code Flow with PKCE の場合は、認可コードを交換する際にバックエンドサーバーに返されます。
expires_in パラメータは、Access Token が有効な秒数を示すもので、Access Token の期限切れを事前に把握するために使用できます。
エラーレスポンス
timeout エラーレスポンスが返されることがあります。これは、web_message 通信の実行中にタイムアウトが発生したことを示します。このエラーは通常、クロスオリジン認証へのフォールバックに関連しています。これを解消するには、サイレント認証を実行するすべての URL を、 で Application の Allowed Web Origins フィールドに追加してください。
checkSession() でポーリングする
checkSession() を使って Auth0 に定期的に問い合わせ、セッションが存在するかどうかを確認できます。セッションが存在しない場合は、そのアプリケーションからユーザーをログアウトさせることができます。同じポーリング方法は、シングルサインオン (SSO) のシナリオでサイレント認証を実装するためにも使用できます。
今後この呼び出しでレート制限の問題が発生するのを避けるため、checkSession() の確認間隔は、呼び出しごとに少なくとも15分空けるようにしてください。
Multi-factor Authentication によるサイレント認証
allowRememberBrowser を true に設定せずに、ユーザーのセッション中、SPA で有効期間の短いアクセストークンを更新するためのサイレント認証 (prompt=none) を行う際に便利です。