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

Начиная с Chrome 123, вы можете использовать Domain Hints вместе с Federated Credential Management API (FedCM) . С Domain Hint API разработчики могут обеспечить лучший пользовательский опыт, показывая только учетные записи федеративного входа из домена, который они принимают.

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 подсказок входа , но эти два API отвечают на разные вопросы. API подсказок входа направлен на ответ «какой идентификатор для нужного мне пользователя?», в то время как Domain Hint направлен на ответ «какой корпорации или серверу должна принадлежать эта учетная запись?».

При использовании domainHint: "any" Chrome отфильтровывает аккаунты, у которых нет доменов (то есть domain_hints не передан или пуст). Например, это позволяет использовать случаи, когда RP допускает только управляемые аккаунты в процессе регистрации.

Если ни одна учетная запись не соответствует domainHint , диалоговое окно FedCM отображает запрос на вход, который позволяет пользователю войти в учетную запись IdP, соответствующую подсказке, запрошенной RP. Когда пользователь нажимает на подсказку, открывается всплывающее окно с URL-адресом входа, указанным в файле конфигурации . Затем к ссылке добавляются подсказка на вход и параметры запроса подсказки домена.

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