When a user creates a passkey, the relying party server saves certain details, while the credential provider, such as Google Password Manager, saves others. Specifically:
- The relying party server saves the public key credential.
- Поставщик учетных данных сохраняет имя пользователя, отображаемое имя, закрытый ключ и другие связанные метаданные. Эти метаданные помогают пользователям идентифицировать и выбрать необходимый пароль при входе в систему.
Potential inconsistencies between the data saved on the relying party server and the credential provider can lead to bad user experiences. Issues may arise in the following scenarios:
- A credential is deleted on the relying party server but not on the credential provider, which results in the credential provider displaying the deleted credential to the user.
- A username or display name is updated on the relying party server but not on the credential provider, which results in the credential provider showing the outdated details.
API Signal в Credential Manager позволяет зависимым сторонам взаимодействовать с поставщиками учетных данных для удаления учетных данных и обновления метаданных пользователя, таких как имя пользователя и отображаемое имя. Поддерживаются три типа запросов для различных сценариев:
SignalUnknownCredentialRequest- Указывает на то, что конкретные учетные данные больше недействительны и должны быть скрыты от поставщика учетных данных или удалены из него.
SignalAllAcceptedCredentialIdsRequest- Provides a list of accepted credential IDs to the credential provider.
SignalCurrentUserDetailsRequest- Обновляет метаданные пользователя.
Совместимость версий
The Signal API is available on devices that run Android 15 or higher, and is available starting from version 1.6.0-beta03 of the androidx.credentials library.
Выполнение
Для использования API Signal выполните следующие действия:
Add the Credential Manager dependency to your project.
Котлин
dependencies { implementation("androidx.credentials:credentials:1.6.0-rc01") }
Круто
dependencies { implementation "androidx.credentials:credentials:1.6.0-rc01" }
Вызов API Signal
Для отправки запроса сигнала поставщику учетных данных используйте поддерживаемый тип запроса сигнала. Для каждого типа запроса сигнала требуется запрос в формате JSON, как показано в следующих примерах:
Неизвестные учетные данные (
SignalUnknownCredentialRequest)Используйте
SignalUnknownCredentialRequest, чтобы сообщить о том, что учетные данные отклонены и считаются неизвестными. Когда поставщик учетных данных получает этот сигнал, он скрывает или удаляет учетные данные.Использование
Use this signal when the relying party fails to verify a passkey assertion. This implies that the passkey is invalid and must be hidden from or removed by the credential provider.
The required JSON parameters for this request are
rpIdandcredentialId. For more information about the JSON structure, see signalUnknownCredential options .credentialManager.signalCredentialState( SignalUnknownCredentialRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */) }.toString() ) )All accepted credentials (
SignalAllAcceptedCredentialIdsRequest)Используйте
SignalAllAcceptedCredentialIdsRequest, чтобы уведомить поставщиков учетных данных о наборе всех принятых учетных данных. После получения сигнала поставщик учетных данных скрывает или удаляет любые учетные данные, не включенные в этот список, или отображает любые ранее скрытые учетные данные, которые теперь включены в список.Использование
Этот сигнал используется, когда проверка пароля стороной, проверяющей данные, завершается неудачей. Эта неудача означает, что пароль недействителен и должен быть скрыт от поставщика учетных данных или удален им. Вы также можете использовать этот сигнал всякий раз, когда вам необходимо передать набор известных идентификаторов учетных данных поставщикам учетных данных.
Обязательными параметрами JSON для этого запроса являются
rpId,userIdиallAcceptedCredentialIds. Для получения дополнительной информации о структуре JSON см. параметры signalAllAcceptedCredential .credentialManager.signalCredentialState( SignalAllAcceptedCredentialIdsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put( "allAcceptedCredentialIds", JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */) ) }.toString() ) )Сведения о текущем пользователе (
SignalCurrentUserDetailsRequest)Используйте
SignalCurrentUserDetailsRequest, чтобы уведомить поставщиков учетных данных о том, что метаданные, такие как имя пользователя и отображаемое имя для данного пользователя, были обновлены и должны отображаться в поставщике учетных данных.Использование
Этот сигнал следует использовать, когда пользователь или зависимая сторона обновляет метаданные ключа доступа, связанные с учетной записью пользователя.
Обязательными параметрами JSON для этого запроса являются
rpId,userId,nameиdisplayName. Для получения дополнительной информации о структуре JSON см. параметры signalCurrentUserDetails .credentialManager.signalCredentialState( SignalCurrentUserDetailsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put("name", name /* [String] New Name to be updated for the current user */) put("displayName", displayName /* [String] New display name to be updated for the current user */) }.toString() ) )
Протестируйте реализацию
Для проверки вашей реализации Signal API выполните следующие шаги:
Установите пример поставщика учетных данных под названием MyVault .
Включите MyVault в качестве поставщика учетных данных в разделе «Настройки» > «Пароли, ключи доступа и учетные записи» > «Предпочитаемая служба» .
Включите все уведомления для MyVault в разделе «Настройки» > «Приложения» > «MyVault» > «Уведомления» .
Убедитесь, что для уведомлений включена функция «Всплывающие уведомления на экране» в разделе «Настройки» > «Приложения» > «Мое хранилище» > «Уведомления» > «Категории» > «Канал уведомлений Signal API» .
В вашем приложении запустите потоки, которые отправляют запросы сигналов поставщику учетных данных. На экране должны появиться уведомления от MyVault. Это подтверждает, что поставщик учетных данных получил запросы.