Начиная с Chrome 125, API режима кнопок начинает пробную версию на десктопах. С API режима кнопок поставщики удостоверений могут использовать API FedCM, даже если у их пользователей нет активных сеансов IdP на момент вызова API. После этого пользователи могут входить на веб-сайт, используя свою федеративную учётную запись, без перехода на сайт IdP. Пользовательский интерфейс FedCM в режиме кнопок более заметен по сравнению с интерфейсом существующего виджета, поскольку он управляется жестом пользователя и лучше отражает намерение пользователя войти в систему.
API режима кнопки
Пользовательский интерфейс FedCM доступен в виде виджета, отображаемого в правом верхнем углу на десктопе или в виде нижней панели на мобильном устройстве сразу после вызова API, что может происходить при переходе пользователя на проверяющую сторону (RP). Это называется режимом виджета . Для отображения виджета пользователь должен был войти в IdP до перехода на RP. FedCM сам по себе не предлагал надёжного способа, позволяющего пользователю войти в IdP до того, как он сможет войти в RP, используя учётную запись, доступную на IdP. FedCM готовится добавить такую возможность.

Новый API режима кнопок добавляет новый режим пользовательского интерфейса, называемый режимом кнопок . В отличие от режима виджетов, режим кнопок не активируется сразу после того, как пользователь нажимает на RP. Вместо этого он активируется, когда пользователь инициирует процесс входа, например, нажимает кнопку «Войти с помощью IdP».
После нажатия кнопки FedCM проверяет, вошел ли пользователь в IdP , обращаясь к конечной точке учётных записей или проверяя статус входа, сохранённый в браузере . Если пользователь ещё не вошел в систему, FedCM предлагает ему войти в IdP, используя login_url
предоставленный IdP, во всплывающем окне. Если браузер знает, что пользователь уже вошел в IdP, или как только пользователь войдет в IdP с помощью всплывающего окна, FedCM открывает модальное диалоговое окно, в котором пользователь может выбрать учётную запись IdP для входа. Выбрав учётную запись, пользователь может войти в RP, используя учётную запись IdP.
В режиме кнопки отображаемое диалоговое окно входа больше, чем в режиме виджета, поэтому значок бренда должен быть больше для поддержания визуального единообразия. Минимальный размер значка для режима виджета составляет 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 .
Чтобы использовать API режима кнопок:
- Включите экспериментальную функцию
FedCmButtonMode
вchrome://flags
. - Обязательно вызовите API, отвечающий за кратковременную активацию пользователя, например нажатие кнопки.
- Вызовите API с параметром
mode
следующим образом:
return await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/config.json",
clientId: "123",
nonce:"456",
}],
mode: "button"
}
});
Браузер отправит новый параметр в конечную точку утверждения идентификатора, представляющий тип запроса, включив mode=button
:
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.
}
Использовать другой вариант учетной записи
RP может разрешить пользователям «использовать другие учетные записи» в средстве выбора учетных записей, например, когда IdP поддерживают несколько учетных записей или заменяют существующую учетную запись.
Чтобы включить возможность использования другой учетной записи:
- Включите экспериментальную функцию
FedCmUseOtherAccount
вchrome://flags
или зарегистрируйтесь в пробной версии API Button Mode. - IdP указывает в файле конфигурации IdP следующее:
{
"accounts_endpoint" : ...,
"modes: {
"button": {
"supports_use_other_account": true,
}
}
}
Примите участие в исследовании происхождения
Вы можете попробовать API режима кнопок локально, включив флаг Chrome chrome://flags#fedcm-button-mode
в Chrome 125 или более поздней версии.
Провайдеры удостоверений также могут включить режим кнопки, зарегистрировав пробную версию источника:
- Зарегистрируйте пробную версию стороннего источника для RP.
Пробные версии Origin позволяют вам опробовать новые функции и оставить отзыв об их удобстве использования, практичности и эффективности сообществу веб-стандартов. Подробнее см. в Руководстве по пробным версиям Origin для веб-разработчиков .
Пробная версия API Button Mode доступна для версий Chrome 125 и 130.
- Перейдите на страницу регистрации пробной версии Origin .
- Нажмите кнопку «Зарегистрироваться» и заполните форму для запроса токена.
- Введите источник IdP как Web Origin .
- Установите флажок Соответствие третьих сторон, чтобы внедрить токен с помощью JavaScript в другие источники.
- Нажмите «Отправить» .
- Встроить выпущенный токен на сторонний сайт.
Чтобы встроить токен на сторонний веб-сайт, добавьте следующий код в библиотеку JavaScript IdP или SDK, предоставляемый из источника IdP.
const tokenElement = document.createElement('meta');
tokenElement.httpEquiv = 'origin-trial';
tokenElement.content = 'TOKEN_GOES_HERE';
document.head.appendChild(tokenElement);
Замените TOKEN_GOES_HERE
на свой токен.
CORS и SameSite=None
потребуются в Chrome 125
КОРС
Начиная с Chrome 125, Chrome будет применять CORS к конечной точке утверждения идентификатора .
CORS (Cross-Origin-Resource-Sharing) — это система, состоящая из передачи HTTP-заголовков, которая определяет, блокируют ли браузеры доступ JavaScript-кода фронтенда к ответам на запросы из разных источников. Конечная точка подтверждения идентификатора на сервере поставщика удостоверений должна отвечать на запрос дополнительными заголовками. Ниже приведён пример заголовка ответа на запрос с https://fedcm-rp-demo.glitch.me
:
Access-Control-Allow-Origin: https://fedcm-rp-demo.glitch.me
Access-Control-Allow-Credentials: true
SameSite=Нет
Параметр SameSite файла cookie определяет, ограничен ли cookie контекстом основного сайта или того же сайта. Если указать значение None
, cookie может быть отправлен на сторонний домен.
В FedCM Chrome отправляет файлы cookie на конечную точку учётных записей , конечную точку подтверждения идентификатора и конечную точку отключения . Начиная с версии Chrome 125, Chrome будет отправлять запросы с учётными данными только с файлами cookie, явно помеченными как SameSite=None
.