Начиная с Chrome 123, вы можете использовать подсказки домена вместе с API федеративного управления учетными данными (FedCM) . С помощью API-интерфейса Domain Hint разработчики могут улучшить взаимодействие с пользователем, показывая только те федеративные учетные записи входа из домена, которые они принимают.
API подсказки домена
FedCM можно использовать, чтобы облегчить пользователю вход в систему проверяющей стороны (RP, ссылка на веб-сайт) с использованием информации учетной записи, предоставленной поставщиком удостоверений (IdP). Однако бывают случаи, когда RP уже знает, что вход на сайт разрешен только учетным записям, связанным с определенным доменом. Это особенно распространено в корпоративных сценариях, где доступ к сайту ограничен корпоративным доменом. Чтобы обеспечить лучшее взаимодействие с пользователем, API FedCM позволяет RP отображать только те учетные записи, которые можно использовать для входа в RP. Это предотвращает сценарии, в которых пользователь пытается войти в RP, используя учетную запись за пределами корпоративного домена, но позже получает сообщение об ошибке (или молчание, если вход не сработал), поскольку не был использован правильный тип учетной записи.
С помощью API Domain Hint RP могут указать свойство domainHint
при вызове API FedCM, чтобы отображать для пользователя только соответствующие учетные записи. IdP может предоставить свойство domain_hints
как часть ответа от конечной точки списка учетных записей, чтобы указать, с каким доменом(ами) связана учетная запись. Таким образом, браузер может отображать совпадающие учетные записи, не раскрывая IdP подсказку о запрошенном домене.
Пример ответа JSON от конечной точки списка учетных записей будет выглядеть следующим образом:
{
"accounts": [{
"id": "1234",
"given_name": "John",
"name": "John Doe",
"email": "john_doe@idp.example",
"picture": "https://idp.example/profile/123",
"approved_clients": ["123", "456", "789"],
}, {
"id": "5678",
"given_name": "Johnny",
"name": "Johnny",
"email": "johnny@idp.example",
"picture": "https://idp.example/profile/456"
"approved_clients": ["abc", "def", "ghi"],
"domain_hints": ["corp.example"]
}]
}
RP может вызвать navigator.credentials.get()
со свойством domainHint
для фильтрации учетных записей. Например, предположим, что пользователь посещает corp-partner.example
и входит в систему с учетной записью corp.example
. Сайт будет вызывать API следующим образом:
return await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/manifest.json",
clientId: "abc",
nonce: nonce,
domainHint : "corp.example"
}]
}
});
Значение domainHint
не отправляется в конечную точку списка учетных записей для фильтрации на стороне сервера, поскольку это может быть вектором снятия отпечатков пальцев для IdP. Вместо этого Chrome выполняет запрос FedCM, как обычно, и отфильтровывает учетные записи, которые не соответствуют значению domainHint
, указанному вызовом navigator.credentials.get()
. Затем Chrome показывает пользователю диалоговое окно FedCM со списком новых учетных записей. Этот подход аналогичен API-интерфейсу Login Hint , но эти два API отвечают на разные вопросы. API подсказки для входа призван ответить на вопрос: «Какой идентификатор нужного мне пользователя?», а подсказка для домена — ответить на вопрос «Какой корпорации или серверу должна принадлежать эта учетная запись?».
Когда используется domainHint: "any"
, Chrome отфильтровывает учетные записи, у которых нет доменов (т. е. domain_hints
не передается или пусто). Например, это позволяет использовать случаи, когда RP разрешает только управляемые учетные записи в процессе регистрации.
Если ни одна учетная запись не соответствует domainHint
, в диалоговом окне FedCM отображается приглашение для входа в систему, которое позволяет пользователю войти в учетную запись IdP, соответствующую подсказке, запрошенной RP. Когда пользователь нажимает на приглашение, открывается всплывающее окно с URL-адресом входа, указанным в файле конфигурации . Затем к ссылке добавляется подсказка для входа в систему и параметры запроса подсказки домена.