API de FIDO2 para Android

La API de FIDO2 permite que las aplicaciones para Android creen y usen credenciales públicas certificadas y sólidas basadas en claves con el fin de autenticar usuarios. La API proporciona una implementación de cliente de WebAuthn, que admite el uso de autenticadores de roaming BLE, NFC y USB (llaves de seguridad), así como un autenticador de plataforma, que permite que el usuario se autentique con su huella dactilar o bloqueo de pantalla.

Integración

El punto de entrada de la API de FIDO2 es Fido2ApiClient.

La API admite dos operaciones:

  • El registro se realiza una vez por autenticador y por cuenta, cuando el usuario asocia un autenticador con una cuenta.
  • La firma se realiza cada vez que el usuario de confianza desea autenticar a un usuario.

Tanto el registro como la firma requieren la interacción del usuario.

Puedes encontrar una aplicación de ejemplo que demuestra el uso de la API en https://github.com/android/identity-samples/tree/main/Fido2.

Interoperabilidad con su sitio web

Es fácil permitir que los usuarios compartan credenciales sin problemas en tu sitio web y aplicación para Android. Para ello, aprovecha los Vínculos de recursos digitales. Para declarar asociaciones, aloja un archivo JSON de Vínculos de recursos digitales en tu sitio web y agrega un vínculo al archivo de Vínculos de recursos digitales en el manifiesto de tu app.

Por ejemplo, si quieres asociar https://example.com con una app para Androidcom.example.android, estos son los 3 pasos obligatorios:

Paso 1: Aloja assetlinks.json en tu dominio

Crea un archivo JSON como este y alójalo en https://example.com/.well-known/assetlinks.json.

[
  {
    "relation" : [
      "delegate_permission/common.handle_all_urls",
      "delegate_permission/common.get_login_creds"
    ],
    "target" : {
      "namespace" : "web",
      "site" : "https://example.com"
    }
  },
  {
    "relation" : [
      "delegate_permission/common.handle_all_urls",
      "delegate_permission/common.get_login_creds"
    ],
    "target" : {
      "namespace" : "android_app",
      "package_name" : "com.example.android",
      "sha256_cert_fingerprints" : [
         "DE:AD:BE:EF"
      ]
    }
  }
]

Asegúrate de que se pueda rastrear desde Google y de que se entregue con el encabezado HTTP Content-Type: application/json.

sha256_cert_fingerprints son las huellas digitales SHA256 del certificado de firma de tu app. Obtén más detalles en la documentación de Android App Links.

En tu app para Android, agrega la siguiente línea al archivo de manifiesto en <application>:

<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />

Paso 3. Agrega un recurso de cadenas asset_statements al archivo strings.xml.

La cadena asset_statements es un objeto JSON que especifica los archivos assetlinks.json que se cargarán. Debes escapar cualquier apóstrofo y comillas que uses en la cadena. Por ejemplo:

<string name="asset_statements" translatable="false">
[{
  \"include\": \"https://example.com/.well-known/assetlinks.json\"
}]
</string>

Para obtener más información sobre cómo asociar tu app y tu sitio web, lee la documentación de Smart Lock para contraseñas en Android.