prompt=none パラメーターをサポートしており、アプリケーションはこれによって がユーザー操作 (認証、同意、または など) を一切表示してはならないことを示せます。Auth0 は、要求されたレスポンスをアプリケーションに返すか、ユーザーがまだ認証されていない場合や、続行前に何らかの同意またはプロンプトが必要な場合はエラーを返します。
SPA で Implicit Flow を使用すると、明示的な緩和策が必要となるセキュリティ上の課題が生じます。SPA でセッションを更新するには、Silent Authentication と組み合わせて Authorization Code Flow with PKCE を使用できます。
ブラウザーにおけるユーザープライバシー制御の最近の進展により、サードパーティ Cookie へのアクセスが妨げられ、ユーザーエクスペリエンスに悪影響が生じています。そのため、ブラウザーベースのフローでは リフレッシュトークンローテーション を使用する必要があります。これにより、SPA でリフレッシュトークンを安全に使用できるほか、ITP のようなブラウザープライバシー技術による UX の中断を招くことなく、エンドユーザーはリソースにシームレスにアクセスできます。
サイレント認証リクエストを開始する
/authorize エンドポイント にリダイレクトする際に、prompt=none パラメーターを追加します。 (認証リクエストに含まれる各パラメーターは、アプリの要件に応じて異なります。)
例:
prompt=none パラメーターを指定すると、Auth0 は指定された response_mode を使用して、成功またはエラーのいずれかの結果を、指定された redirect_uri (コールバック URL) に直ちに返します。
該当する Rules は、サイレント認証プロセスの一部として実行されます。
レスポンスモード
response_mode パラメーターは、Auth0 が認可レスポンスをアプリケーションにどのように返すかを指定します。サイレント認証では、次のモードを使用できます。
| モード | 配信方法 | ユースケース |
|---|---|---|
query | クエリ文字列 (?code=...) | サーバー側で処理する Authorization Code フロー |
fragment | URL フラグメント (#access_token=...) | Implicit フロー (レガシー) |
web_message | postMessage() API | SPA に推奨 - ページ遷移は不要 |
web_message を使用する場合、Auth0 は非表示の iframe 内に HTML ページをレンダリングし、HTML5 Web Messaging API を使用して結果をアプリケーションに返します。これにより、画面に表示されるページリダイレクトや state の消失なしで、サイレント認証を実行できます。
response_mode=web_message を使用するには、アプリケーション設定 の Allowed Web Origins フィールドにアプリケーションの URL を追加する必要があります。すべてのレスポンスモードの詳細については、OAuth 2.0 Authorization Framework を参照してください。認証成功時のレスポンス
response_mode によって異なります。
- web_message
- fragment
- query
PKCE を使用する Authorization Code Flow (アプリケーション (または SDK) はこのメッセージを受信し、code をトークンに交換します。ユーザーに有効なセッションがない場合、Auth0 は代わりにエラーを postMessage します。
response_type=code) で response_mode=web_message を使用すると、Auth0 は authorization code をアプリケーションに postMessage する HTML ページを返します。prompt=none パラメーターを使用せずに直接ログインした場合と形式上は同一です。唯一の違いは、prompt=none を使用すると、ユーザーの操作なしでレスポンスが即座に返されることです。
エラーレスポンス
response_mode を使ってエラーを返します。リダイレクトベースのモード (fragment または query) の場合:
web_message モードでは、上記の例のように、エラーは postMessage() を通じて送信されます。
ERROR_CODE に指定可能な値は、OpenID Connect specification で定義されています。
| Response | Description |
|---|---|
login_required | ユーザーが Auth0 にログインしていないため、サイレント認証はできません。このエラーは、テナント レベルの Log In Session Management 設定の構成によって発生することがあります。特に、Require log in after 設定で指定した期間が経過すると発生する場合があります。詳しくは、Configure Session Lifetime Settings を参照してください。 |
consent_required | ユーザーは Auth0 にログインしていますが、アプリケーションを認可するには同意が必要です。 |
interaction_required | ユーザーは Auth0 にログインしており、アプリケーションも認可済みですが、認証を完了する前に別の場所にリダイレクトされる必要があります。たとえば、redirect rule を使用している場合です。 |
prompt=none パラメーターを付けずにユーザーを Auth0 のログインページにリダイレクトする必要があります。
期限切れのトークンを更新する
checkSession メソッド は、SPA 向けに response_mode=web_message を使用したサイレントトークンリクエストを hidden iframe で実行します。SPA では、Auth0.js が結果 (トークンまたはエラー code) を処理し、アプリケーションが指定したコールバック関数を通じてその情報を渡します。これにより、UX を損なうことなく処理できるため、ページの再読み込みや state の消失は発生しません。
Safari ブラウザーに関するその他の重要な制限事項と回避策については、Safari 使用時にトークンを更新する を参照してください。
アクセストークンの有効期限
- Auth0 から返される
expires_inレスポンスパラメーターを確認する。 - 有効期限は考慮しない。代わりに、API がアプリケーションからのリクエストを拒否した場合 (401 など) にアクセストークンを更新する。
expires_in パラメーターは、認証が成功すると Auth0 からハッシュパラメーターとして返されます。Authorization Code Flow with PKCE の場合は、認可コード交換の実行時にバックエンドサーバーに返されます。
expires_in パラメーターは、アクセストークンの有効期間 (秒数) を示すため、アクセストークンの有効期限切れを事前に把握するために使用できます。
エラーレスポンス
web_message 通信の実行中にタイムアウトが発生したことを示す timeout エラーレスポンスを受け取る場合があります。このエラーは通常、クロスオリジン認証へのフォールバックに関連しています。解決するには、 を使用して、サイレント認証を実行するすべての URL を、アプリケーションの Allowed Web Origins フィールドに追加してください。
checkSession() を使用したポーリング
checkSession() を使って Auth0 に定期的に問い合わせ、セッションが存在するかどうかを確認できます。セッションが存在しない場合は、そのユーザーをアプリケーションからログアウトできます。同じポーリング方法は、SSO シナリオでサイレント認証を実装する場合にも使用できます。
将来この呼び出しにレート制限が適用された場合の問題を避けるため、checkSession() の呼び出し間隔は少なくとも 15 分空ける必要があります。
MFA を使用したサイレント認証
allowRememberBrowser を true に設定しなくても、ユーザーのセッション中に SPA で有効期間の短いアクセストークンを更新するためのサイレント認証 (prompt=none) を行えるため、有用です。