Chrome 125 以降、ボタンモード API のオリジン トライアルがパソコンで開始されます。ボタンモード API を使用すると、ユーザーが API 呼び出し時にアクティブな IdP セッションを持っていない場合でも、ID プロバイダは FedCM API を使用できます。ユーザーは IdP サイトに移動することなく、フェデレーション アカウントでウェブサイトにログインできます。ボタンモードの FedCM UI は、ユーザーの操作によってゲートされるため、既存のウィジェット フローの UI よりも目立ち、ログインに対するユーザーの意図をより適切に反映します。
Button Mode API
FedCM ユーザー インターフェースは、API が呼び出されるとすぐに、パソコンでは右上隅に表示されるウィジェットとして、モバイルではボトムシートとして利用可能になりました。API は、ユーザーが証明書利用者(RP)にアクセスしたときに呼び出される可能性があります。これを「ウィジェット モード」と呼びます。ウィジェットを表示するには、ユーザーが RP にアクセスする前に IdP にログインしている必要があります。FedCM 自体には、ユーザーが IdP で利用可能なアカウントを使用して RP にログインする前に、ユーザーが IdP にログインできるようにする信頼性の高い方法がありませんでした。FedCM では、このための方法が追加されようとしています。

新しい Button Mode API は、button モードという新しい UI モードを追加します。ウィジェット モードとは異なり、ボタン モードはユーザーが RP にアクセスした直後に呼び出されるものではありません。このメソッドは、ユーザーが [IdP でログイン] ボタンを押すなどしてログインフローを開始したときに呼び出すことを想定しています。
ボタンが押されるとすぐに、FedCM は アカウント エンドポイントへのフェッチまたはブラウザに保存されたログイン ステータスを通じて、ユーザーが IdP にログインしているかどうかを確認します。ユーザーがまだログインしていない場合、FedCM は、ポップアップ ウィンドウを介して IdP から提供された login_url
を使用して IdP にログインするようユーザーに求めます。ブラウザがユーザーがすでに IdP にログインしていることを認識している場合、またはユーザーがポップアップ ウィンドウで IdP にログインするとすぐに、FedCM はユーザーがログインに使用する IdP アカウントを選択するためのモーダル ダイアログを開きます。アカウントを選択すると、ユーザーは IdP アカウントを使用して RP にログインできます。
ボタンモードの UI では、表示されるログイン ダイアログがウィジェット モードよりも大きいため、視覚的な一貫性を保つために、ブランディング アイコンも大きくする必要があります。ウィジェット モードのアイコンの最小サイズは 25x25 ピクセルですが、ボタン モードのアイコンの最小サイズは 40x40 ピクセルです。IdP の既知のファイルでは、次のように複数のアイコン URL を指定できます。
{
// ... Other settings (like endpoints) here
"branding": {
"icons": [
{
"url": "https://size-25px-image",
"size": 25,
},
{
"url": "https://size-40px-image",
"size": 40
}
]
}
}

Chrome 125 を使用して、https://fedcm-demo-rp.dev/active-mode でお試しください。
Button Mode API を使用するには:
chrome://flags
で試験運用版機能FedCmButtonMode
を有効にします。- ボタンのクリックなど、一時的なユーザー アクティベーションの背後で API を呼び出すようにしてください。
- 次のように
mode
パラメータを使用して API を呼び出します。
return await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/config.json",
clientId: "123",
nonce:"456",
}],
mode: "button"
}
});
ブラウザは、mode=button
を含めることでリクエスト タイプを表す新しいパラメータを ID アサーション エンドポイントに送信します。
POST /fedcm_assertion_endpoint HTTP/1.1
Host: idp.example
Origin: https://rp.example/
Content-Type: application/x-www-form-urlencoded
Cookie: 0x23223
Sec-Fetch-Dest: webidentity
account_id=123&client_id=client1234&nonce=Ct60bD&disclosure_text_shown=true&is_auto_selected=false&mode=button
特徴検出
ブラウザがボタンモードを使用できるかどうかを判断するには、次のコードで確認します。
let supportsFedCmMode = false;
try {
navigator.credentials.get({
identity: Object.defineProperty(
{}, 'mode', {
get: function () { supportsFedCmMode = true; }
}
)
});
} catch(e) {}
if (supportsFedCmMode) {
// The button mode is supported.
}
別のアカウント オプションを使用する
たとえば、IdP が複数のアカウントをサポートしている場合や、既存のアカウントを置き換える場合、RP はアカウント選択ツールでユーザーが「他のアカウントを使用」できるようにすることができます。
別のアカウントを使用するオプションを有効にするには:
chrome://flags
で試験運用版機能FedCmUseOtherAccount
を有効にするか、Button Mode API のオリジン トライアルに登録します。- IdP は、IdP 構成ファイルで次の項目を指定します。
{
"accounts_endpoint" : ...,
"modes: {
"button": {
"supports_use_other_account": true,
}
}
}
オリジン トライアルに参加する
Chrome 125 以降で Chrome フラグ
chrome://flags#fedcm-button-mode
をオンにすると、ボタンモード API をローカルで試すことができます。
IdP は、オリジン トライアルを登録してボタンモードを有効にすることもできます。
- RP のサードパーティ オリジン トライアルを登録します。
オリジン トライアルでは、新機能を試して、そのユーザビリティ、実用性、有効性に関するフィードバックをウェブ標準コミュニティに送信できます。詳しくは、ウェブ デベロッパー向けのオリジン トライアル ガイドをご覧ください。
Button Mode API のオリジン トライアルは、Chrome 125 から Chrome 130 までご利用いただけます。
- オリジン トライアルの登録ページに移動します。
- [登録] ボタンをクリックし、フォームに記入してトークンをリクエストします。
- IdP のオリジンを [Web Origin] として入力します。
- [サードパーティのマッチング] をオンにして、他のオリジンで JavaScript を使用してトークンを挿入します。
- [送信] をクリックします。
- 発行されたトークンをサードパーティのウェブサイトに埋め込みます。
サードパーティのウェブサイトにトークンを埋め込むには、IdP のオリジンから提供される IdP の JavaScript ライブラリまたは SDK に次のコードを追加します。
const tokenElement = document.createElement('meta');
tokenElement.httpEquiv = 'origin-trial';
tokenElement.content = 'TOKEN_GOES_HERE';
document.head.appendChild(tokenElement);
TOKEN_GOES_HERE
は、独自のトークンに置き換えます。
Chrome 125 で CORS と SameSite=None
が必須に
CORS
Chrome 125 以降、ID アサーション エンドポイントで CORS が適用されます。
CORS(クロスオリジン リソース シェアリング)は、HTTP ヘッダーの送信で構成されるシステムです。このシステムは、ブラウザがフロントエンドの JavaScript コードによるクロスオリジン リクエストのレスポンスへのアクセスをブロックするかどうかを決定します。IdP サーバーの ID アサーション エンドポイントは、追加のヘッダーを使用してリクエストに応答する必要があります。次に、https://fedcm-rp-demo.glitch.me
からのリクエストに対するレスポンス ヘッダーの例を示します。
Access-Control-Allow-Origin: https://fedcm-rp-demo.glitch.me
Access-Control-Allow-Credentials: true
SameSite=None
Cookie の SameSite パラメータは、Cookie がファーストパーティまたは同一サイトのコンテキストに制限されるかどうかを宣言します。None
に指定すると、Cookie をサードパーティ ドメインに送信できます。
FedCM では、Chrome は アカウント エンドポイント、ID アサーション エンドポイント、切断エンドポイントに Cookie を送信します。Chrome 125 以降では、Chrome は SameSite=None
と明示的にマークされた Cookie のみを含む認証情報付きリクエストを送信します。