Safariの使用でトークン更新の問題を解決する
最新バージョンのSafariブラウザーでは、サイレント認証でのトークン更新が期待通りに動作しないことがあります。新しいバージョンのSafariブラウザーには、Intelligent Tracking Prevention(ITP)という新機能が導入されています。ITPは、Webサイトによって、ユーザーの複数サイトでのアクティビティが追跡されるのを防ぐように設計されています。デフォルトで、ITPは有効になっています。使用しているSafariのバージョンにITPがあるのかを調べるには、[設定]>[プライバシー]タブに移動して、[サイト越えトラッキングを防ぐ]のオプションが選択されているかどうかを確認します。
ITPとブラウザーの動作
ITPを有効にすると、ブラウザーはサードパーティのCookieが無効化されているように動作します。そのため、ユーザーに何も表示することなく新しいトークンを取得することが不可能になります。これは、OpenID Connect(OIDC)がSPAでセッションを処理するためにiframeを使用する方法に似ています。
SPA SDK(推奨)にあるgetTokenSilently
は、リフレッシュトークンのローテーションを使用するようにSDKを構成しない限り、サイレント認証を行います。
回避策
ブラウザーに最近加わった新しいプライバシー保護機能は、サードパーティクッキーへのアクセスを妨げるため、ユーザーエクスペリエンスに悪影響を与えています。リフレッシュトークンのローテーションを代わりに使用することもできます。リフレッシュトークンのローテーションは、SPAでリフレッシュトークンを安全に使用するためのセキュリティ方式であり、リソースにアクセスするエンドユーザーに、ITPのようなブラウザーのプライバシー保護技術に煩わされないシームレスなユーザーエクスペリエンスを提供します。
また、ITPによって引き起こされる問題を回避するために、Auth0のカスタムドメイン機能を使用することができます。これは特に、そのカスタムドメインがアプリケーションのWebサイトドメインのサブドメインにある場合は有効です。たとえば、お使いのアプリケーションがexample.comでホストされている場合、カスタムドメインはsubdomain.example.comの形式である必要があります。
ITPのデバッグモード
Safari Technology Previewにある[Intelligent Tracking Prevention Debug Mode(インテリジェントトラッキング防止機能のデバッグモード)]は、ITPの問題を解消するために使用することができます。ITPをデバッグする方法については、こちらのWebKitブログ記事を参照してください。
注意:この説明には、テスト目的で、カスタムドメインに追跡機能があると永続的に分類する方法が記載されています。しかし、新しいバージョンのSafari Technology Previewでは、この設定のためにUser Defaultsを保管するためのドメインが、com.apple.SafariTechnologyPreview
からcom.apple.WebKit.Networking
に変更されています。手順で説明されているコマンドに問題がある場合には、以下を試してみてください。
サイトに追跡機能があると分類する:
defaults write com.apple.WebKit.Networking ResourceLoadStatisticsManualPrevalentResource example.com
設定を検査する:
defaults read com.apple.WebKit.Networking ResourceLoadStatisticsManualPrevalentResource
設定を削除する:
defaults delete com.apple.WebKit.Networking ResourceLoadStatisticsManualPrevalentResource
設定を有効にするには、変更するたびに、Safari Technology Previewを再起動する必要があります。