Когда пользователь создает ключ доступа, сервер проверяющей стороны сохраняет определенные данные, а поставщик учетных данных, например Google Менеджер паролей, – другие. А именно:
- Сервер проверяющей стороны сохраняет учетные данные открытого ключа.
- Поставщик учетных данных сохраняет имя пользователя, отображаемое имя, закрытый ключ и другие связанные метаданные. Эти метаданные помогают пользователям идентифицировать и выбрать нужный ключ доступа при входе.
Возможные несоответствия между данными, сохраненными на сервере проверяющей стороны и у поставщика учетных данных, могут привести к неудобствам для пользователей. Проблемы могут возникнуть в следующих случаях:
- Учетные данные удалены на сервере проверяющей стороны, но не у поставщика учетных данных. В результате поставщик учетных данных показывает пользователю удаленные учетные данные.
- Имя пользователя или отображаемое название обновлено на сервере проверяющей стороны, но не у поставщика учетных данных, в результате чего поставщик учетных данных показывает устаревшие сведения.
Signal API Менеджера учетных данных позволяет агентам обмениваться данными с поставщиками учетных данных, чтобы удалять учетные данные и обновлять метаданные пользователей, например имя пользователя и отображаемое имя. Для разных сценариев поддерживаются три типа запросов:
SignalUnknownCredentialRequest- Указывает, что определенные учетные данные больше не действительны и должны быть скрыты или удалены из поставщика учетных данных.
SignalAllAcceptedCredentialIdsRequest- Предоставляет поставщику учетных данных список принятых идентификаторов учетных данных.
SignalCurrentUserDetailsRequest- Обновляет метаданные пользователя.
Совместимость версий
Signal API доступен на устройствах с Android 15 или более поздней версии, начиная с версии 1.6.0-beta03 библиотеки androidx.credentials.
Реализация
Чтобы использовать Signal API, выполните следующие действия:
Добавьте в проект зависимость Менеджера учетных данных.
Котлин
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha03") }
Круто
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha03" }
Вызов Signal API
Чтобы отправить запрос сигнала поставщику учетных данных, используйте поддерживаемый запрос сигнала. Для каждого типа запроса сигналов требуется запрос JSON, как показано в примерах ниже.
Неизвестные учетные данные (
SignalUnknownCredentialRequest)Используйте
SignalUnknownCredentialRequest, чтобы указать, что учетные данные отклонены и считаются неизвестными. Получив этот сигнал, поставщик учетных данных скрывает или удаляет их.Использование
Используйте этот сигнал, когда проверяющей стороне не удается проверить утверждение ключа доступа. Это означает, что ключ доступа недействителен и должен быть скрыт или удален поставщиком учетных данных.
Обязательные параметры JSON для этого запроса –
rpIdиcredentialId. Дополнительную информацию о структуре JSON можно найти в разделе Параметры signalUnknownCredential.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() ) )Все принимаемые документы (
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 > Уведомления.
Убедитесь, что параметр Всплывающие уведомления включен. Для этого выберите Настройки > Приложения > MyVault > Уведомления > Категории > Канал уведомлений Signal API.
В приложении запустите процессы, которые отправляют запросы сигналов поставщику учетных данных. На экране должны появиться уведомления от MyVault. Это подтверждает, что поставщик учетных данных получил запросы.