FedCM での自動再認証のサポート

Chrome が FedCM での自動再認証をサポート

Federated Credential Management API(FedCM)は、プライバシーを保護した ID 連携のウェブ API です。ID 連携では、RP(リレーリング パーティ)は IdP(ID プロバイダ)に依存して、新しいユーザー名とパスワードを要求せずにユーザーにアカウントを提供します。

FedCM を使用すると、ブラウザは RP と IdP が情報を交換するコンテキストを把握できます。共有される情報と権限レベルをユーザーに通知し、意図しない不正使用を防ぎます。FedCM は Chrome バージョン 108 以降で利用できます。

Chrome 115 では、FedCM で自動再認証がサポートされるようになりました。これにより、ユーザー エクスペリエンスが向上し、最初の同意後に RP に対する再認証がより効率的に行えるようになります。

自動再認証

現在、ユーザーが FedCM API を介して IdP で RP に連携アカウントを作成した後、次回ウェブサイトにアクセスする際には、ユーザー インターフェースで同じ手順を行う必要があります。つまり、ユーザーは明示的に手動で再確認して再認証し、ログインフローを続行する必要があります。

明示的なユーザー エクスペリエンスは、ユーザーがトラッキングを防止するために連携アカウントを作成する前に行うことは理にかなっています(これは FedCM の主な目標の一つです)。しかし、ユーザーが一度行った後で再度行うことは、不必要に煩雑です。ユーザーが RP と IdP 間の通信を許可する権限を付与した後で、すでに承認済みの事項について、ユーザーに再度明示的に確認を求めることにプライバシーやセキュリティ上のメリットはありません。そのため、RP がリピーター向けに選択できる、より合理化された UX を導入します。

FedCM 自動再認証(略称「auto-reauthn」)を使用すると、ユーザーが FedCM を使用して初回認証後に再びアクセスしたときに、自動的に再認証できます。ここでの「最初の認証」とは、ユーザーが同じブラウザ インスタンスで FedCM のログイン ダイアログの [Continue as...] ボタンを初めてタップして、アカウントを作成するか、RP のウェブサイトにログインすることを意味します。

ユーザーがタップしてアカウントを作成または認証するダイアログ。
ユーザーがタップしてアカウントを作成または認証するダイアログ。

自動再認証のオプションを選択する

より優れた UX を提供するため、また仕様に準拠するため、自動再認証を導入しますが、デフォルトのユーザー エクスペリエンスは、コードを変更しない限り異なります。自動再認証が利用可能な場合、ブラウザは、デベロッパーが navigator.credentials.get() で指定した mediation オプションで選択したオプションに応じて動作を変更します。

const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/fedcm.json",
      clientId: "1234",
    }],
  },
  mediation: 'optional', // this is the default
});

mediation認証情報管理 API のプロパティであり、PasswordCredentialFederatedCredential と同様に動作します。また、PublicKeyCredential でも部分的にサポートされています。このプロパティには、次の 4 つの値を指定できます。

  • 'required': 続行するには常にメディエーションを必要とします(UI の [続行] ボタンをクリックするなど)。ユーザーが認証が必要なたびに明示的に権限を付与することが想定される場合は、このオプションを選択します。
  • 'optional'(デフォルト): 可能であれば自動再認証、可能でない場合仲裁が必要です。ログインページでこのオプションを選択することをおすすめします。
  • 'silent': 可能であれば自動再認証を行い、できない場合は仲裁を必要とせずにサイレント エラーを返します。このオプションは、専用のログインページ以外のページで、ユーザーのログインを維持したい場合に選択することをおすすめします。たとえば、配送ウェブサイトの商品ページや、ニュース ウェブサイトの記事ページなどです。
  • 'conditional': WebAuthn に使用されます。現在のところ、FedCM では使用できません。

この呼び出しでは、次の条件で自動再認証が行われます。

  • FedCM を使用できます。たとえば、ユーザーが FedCM をグローバルに無効にしていないか、設定で RP に対して無効にしていない場合です。
  • ユーザーは、このブラウザでウェブサイトにログインするために、FedCM API で 1 つのアカウントのみを使用しました。
  • ユーザーがそのアカウントで IdP にログインしている。
  • 過去 10 分以内に自動再認証が行われていない。
  • RP が前回のログイン後に navigator.credentials.preventSilentAccess() を呼び出していない。

上記の条件が満たされると、FedCM navigator.credentials.get() が呼び出されるとすぐに、ユーザーの自動再認証が試行されます。

FedCM を介してユーザーが自動的に再認証する。

preventSilentAccess() でメディエーションを適用する

ログアウト直後にユーザーの再認証を自動的に行うと、ユーザー エクスペリエンスが損なわれます。そのため、FedCM では、この動作を防ぐために、自動再認証後に 10 分間の無効期間があります。つまり、ユーザーが 10 分以内に再度ログインしない限り、自動再認証は 10 分ごとに最大 1 回実行されます。RP は navigator.credentials.preventSilentAccess() を呼び出して、ユーザーが RP から明示的にログアウトしたときに(ログアウト ボタンをクリックするなど)、自動再認証を無効にするようブラウザに明示的にリクエストする必要があります。

function signout() {
  navigator.credentials.preventSilentAccess();
  location.href = '/signout';
}

ユーザーは設定で自動再認証をオプトアウトできます

ユーザーは、設定メニューから自動再認証をオプトアウトできます。

  • パソコン版 Chrome で、[chrome://password-manager/settings] > [自動的にログイン] に移動します。
  • Android Chrome で、[設定] > [パスワード マネージャー] > 右上にある歯車アイコン > [自動ログイン] を開きます。

切り替えボタンを無効にすると、ユーザーは自動再認証動作を完全にオプトアウトできます。この設定は、ユーザーが Chrome インスタンスで Google アカウントにログインしていて、同期が有効になっている場合に、デバイス間で保存および同期されます。

フィードバックを共有

FedCM をテストしている場合は、crbug.com のコンポーネント「Blink > Identity > FedCM」でフィードバックや問題をお知らせください。

写真: Noah Samuel FranzUnsplash