Quando um usuário cria uma chave de acesso, o servidor da parte confiável salva alguns detalhes, enquanto o provedor de credenciais, como o Gerenciador de senhas do Google, salva outros. Especificamente:
- O servidor da parte confiável salva a credencial de chave pública.
- O provedor de credenciais salva o nome de usuário, o nome de exibição, a chave privada e outros metadados associados. Esses metadados ajudam os usuários a identificar e selecionar a chave de acesso necessária durante o login.
Possíveis inconsistências entre os dados salvos no servidor da parte confiável e o provedor de credenciais podem levar a experiências ruins para o usuário. Problemas podem surgir nos seguintes cenários:
- Uma credencial é excluída no servidor da parte confiável, mas não no provedor de credenciais, o que faz com que o provedor de credenciais mostre a credencial excluída ao usuário.
- Um nome de usuário ou nome de exibição é atualizado no servidor da parte confiável, mas não no provedor de credenciais, o que faz com que o provedor de credenciais mostre os detalhes desatualizados.
A API Signal do Gerenciador de credenciais permite que as partes confiáveis se comuniquem com os provedores de credenciais para excluir credenciais e atualizar metadados do usuário, como o nome de usuário e o nome de exibição. Há três tipos de solicitação compatíveis para cenários diferentes:
SignalUnknownCredentialRequest- Indica que uma credencial específica não é mais válida e precisa ser ocultada ou removida do provedor de credenciais.
SignalAllAcceptedCredentialIdsRequest- Fornece uma lista de IDs de credenciais aceitos para o provedor de credenciais.
SignalCurrentUserDetailsRequest- Atualiza os detalhes dos metadados do usuário.
Compatibilidade de versões
A API Signal está disponível em dispositivos com o Android 15 ou versões mais recentes e
na versão 1.6.0-beta03 da biblioteca
androidx.credentials.
Implementação
Para usar a API Signal, siga estas etapas:
Adicione a dependência do Credential Manager ao seu projeto.
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha02") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha02" }
Chamar a API Signal
Para enviar uma solicitação de indicador ao provedor de credenciais, use uma solicitação de indicador compatível. Cada um dos tipos de solicitação de indicador requer uma solicitação JSON, conforme mostrado nos exemplos a seguir:
Credencial desconhecida (
SignalUnknownCredentialRequest)Use
SignalUnknownCredentialRequestpara sinalizar que uma credencial foi rejeitada e considerada desconhecida. Quando o provedor de credenciais recebe esse sinal, ele oculta ou exclui a credencial.Uso
Use esse indicador quando a parte confiável não conseguir verificar uma declaração de chave de acesso. Isso significa que a chave de acesso é inválida e precisa ser ocultada ou removida pelo provedor de credenciais.
Os parâmetros JSON necessários para essa solicitação são
rpIdecredentialId. Para mais informações sobre a estrutura JSON, consulte opções de 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() ) )Todas as credenciais aceitas (
SignalAllAcceptedCredentialIdsRequest)Use
SignalAllAcceptedCredentialIdsRequestpara notificar os provedores de credenciais com o conjunto de todas as credenciais aceitas. Depois que o sinal é recebido pelo provedor de credenciais, ele oculta ou exclui as credenciais que não estão incluídas nessa lista ou reexibe as credenciais ocultas que agora estão incluídas na lista.Uso
Use esse indicador quando uma verificação de chave de acesso falhar pela parte confiável. Essa falha significa que a chave de acesso é inválida e precisa ser ocultada ou removida pelo provedor de credenciais. Você também pode usar esse indicador sempre que precisar transmitir o conjunto de IDs de credenciais conhecidos para provedores de credenciais.
Os parâmetros JSON obrigatórios para essa solicitação são
rpId,userIdeallAcceptedCredentialIds. Para mais informações sobre a estrutura JSON, consulte as opções de 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() ) )Detalhes do usuário atual (
SignalCurrentUserDetailsRequest)Use
SignalCurrentUserDetailsRequestpara notificar os provedores de credenciais de que os metadados, como o nome de usuário e o nome de exibição de um determinado usuário, foram atualizados e precisam aparecer no provedor de credenciais.Uso
Use esse indicador quando o usuário ou a parte confiável atualizar os metadados da chave de acesso associados à conta de usuário.
Os parâmetros JSON necessários para essa solicitação são
rpId,userId,nameedisplayName. Para mais informações sobre a estrutura JSON, consulte as opções de 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() ) )
Testar a implementação
Para testar sua implementação da API Signal, siga estas etapas:
Instale o exemplo de provedor de credenciais chamado MyVault.
Ative o MyVault como um provedor de credenciais em Configurações > Senhas, chaves de acesso e contas > Serviço preferencial.
Ative todas as notificações do MyVault em Configurações > Apps > MyVault > Notificações.
Verifique se a opção Exibir na tela está ativada para notificações em Configurações > Apps > MyVault > Notificações > Categorias > Canal de notificação da API Signal.
No app, acione os fluxos que enviam as solicitações de indicador para o provedor de credenciais. As notificações do MyVault vão aparecer na tela. Isso confirma que o provedor de credenciais recebeu as solicitações.