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 自動再認証(略して「自動再認証」)を使用すると、FedCM を使用した初回認証の後、ユーザーが戻ってきたときに自動的に再認証できます。ここでの「初回認証」とは、ユーザーがアカウントを作成するか、同じブラウザ インスタンスで FedCM のログイン ダイアログで [Continue as...] ボタンをタップして RP のウェブサイトにログインすることを意味します。
自動再認証のオプションを選択する
ユーザー エクスペリエンスを改善し、仕様に沿うために自動再認証を導入していますが、コードを変更することなく、デフォルトのユーザー エクスペリエンスは異なります。自動再認証が利用可能な場合、ブラウザの動作は、デベロッパーが 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
は Credential Management API のプロパティで、PasswordCredential と FederatedCredential に対して同じ方法で動作し、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()
が呼び出されるとすぐにユーザーの自動再認証の試行が開始されます。
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 Franz(出典: Unsplash)