Обновления FedCM: API-интерфейс Domain Hint

Начиная с 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-адресом входа, указанным в файле конфигурации . Затем к ссылке добавляется подсказка для входа в систему и параметры запроса подсказки домена.

Пример запроса на вход в систему, когда ни одна учетная запись не соответствует доменуHint.
Пример запроса на вход в систему, когда ни одна учетная запись не соответствует domainHint .