Configura el uso compartido de credenciales eficiente en sitios web y apps para Android

1. Descripción general

¿Tus usuarios acceden a tu servicio a través de sitios web y apps para Android? Obligarlos a acceder por separado a cada plataforma genera fricción innecesaria y puede provocar abandonos.

Los vínculos de recursos digitales (DAL) solucionan este problema, ya que te permiten declarar asociaciones entre tus sitios web y tus apps. Esto permite que los administradores de contraseñas, como el Administrador de contraseñas de Google, compartan las contraseñas y las llaves de acceso guardadas entre sí.

Específicamente, configurar tu archivo de Vínculos de recursos digitales requiere diferentes relaciones según lo que quieras compartir:

  • Para contraseñas: Incluir delegate_permission/common.get_login_creds permite que los administradores de contraseñas compartan las contraseñas guardadas entre tu sitio web y tu aplicación.
  • Para las llaves de acceso: Debido a que las llaves de acceso están estrictamente vinculadas a un dominio web específico, Android requiere una prueba de propiedad del dominio. Por lo tanto, debes incluir delegate_permission/common.handle_all_urls. Si bien es posible que reconozcas este permiso como el que se usa para los Android App Links (vinculación directa), también es el requisito estricto para permitir que las llaves de acceso creadas en una plataforma se usen en la otra.

¿El resultado? Los usuarios pueden acceder sin problemas a todas tus plataformas afiliadas con las contraseñas o llaves de acceso guardadas para solo una de ellas.

Contraseñas disponibles en todas las propiedades

Implementar el uso compartido de credenciales eficiente puede mejorar significativamente la experiencia del usuario. Por ejemplo, eBay experimentó un aumento del 10% en el éxito de los accesos después de implementar la DAL para el uso compartido de credenciales.

En este codelab, aprenderás a usar los vínculos de recursos digitales para habilitar el uso compartido de credenciales entre tu sitio web y tu app para Android.

Requisitos previos

Qué aprenderás

  • Cómo configurar el uso compartido de credenciales con Google Play Console (recomendado)
  • Cómo crear manualmente un archivo assetlinks.json
  • Cómo configurar una app para Android para la asociación manual
  • Cómo habilitar las llaves de acceso en una app para Android asociándola con un dominio de sitio web
  • Cómo usar herramientas para generar y validar tu configuración

Requisitos

  • Un sitio web: La capacidad de alojar un archivo JSON en https://{your-domain}/.well-known/assetlinks.json
  • Una app para Android:
    • Para el método de Play Console: Una app publicada en Google Play
    • Para el método manual: Un proyecto de Android que puedes modificar y compilar. Ten en cuenta que, para que funcione el uso compartido de credenciales con el Administrador de contraseñas de Google, la app debe publicarse en Google Play.

Cómo funciona

Para que el uso compartido de credenciales funcione, debes establecer una confianza bidireccional:

  1. Web -> App: Tu sitio web debe alojar un archivo assetlinks.json que declare que confía en tu app para Android.
  2. De la app a la Web: Tu app para Android debe estar configurada para confiar en tu sitio web.

Veremos dos formas de hacerlo: la automática, con Google Play Console (recomendada), y la manual, con vínculos de recursos digitales directamente.

2. Configuración con Google Play Console (recomendado)

La forma más sencilla de habilitar el uso compartido de credenciales entre tu sitio web y tu app para Android es a través de Google Play Console. Este método te permite asociar tu app con tu sitio web sin necesidad de modificar el manifiesto de la app ni publicar una nueva versión. Google Play administra la asociación del lado de la app por ti.

Requisitos previos

  • Permisos de Play Console para acceder a la página de vínculos directos
  • Capacidad para publicar un archivo /.well-known/assetlinks.json en tu dominio

Para obtener más información sobre los vínculos directos, consulta Android App Links.

Pasos

  1. En Play Console, navega a Crecimiento > Vínculos directos.
  2. Si tu dominio no aparece en la lista, haz clic en Agregar dominio en Configuración de la app.
  3. Busca tu dominio y ubica la columna Uso compartido de credenciales. Haz clic en Activar (o asegúrate de que Habilitar el uso compartido de credenciales esté activado para los dominios nuevos).
  4. Copia el fragmento de código JSON que generó Play Console.
  5. Publica este contenido JSON en https://{your-domain}/.well-known/assetlinks.json. (Si ya tienes este archivo, agrégale la nueva declaración).
  6. En Play Console, haz clic en Crear asociación con el sitio web o Activar el uso compartido de credenciales.

Play Console ahora verificará la configuración de tu hosting.

Vínculos directos de Play Console

Para que el uso compartido de credenciales funcione, tu host de sitio web debe cumplir con los siguientes requisitos:

  • Se puede acceder a la URL a través de HTTPS.
  • El servidor responde con Content-Type: application/json.
  • Se puede acceder a la URL sin redireccionamientos.

Una vez que se verifique, el uso compartido de credenciales estará activo. Los cambios de configuración pueden tardar entre 1 y 2 semanas en propagarse.

3. Configura manualmente con Vínculos de recursos digitales

¿Necesitas más control? ¿O no tienes acceso a Play Console? Puedes configurar el uso compartido de credenciales entre tu sitio web y tu app para Android de forma manual. Esto implica dos tareas principales: alojar el archivo JSON en tu sitio y actualizar el manifiesto de tu app para Android.

1. Obtén la huella digital de tu app

Antes de configurar el uso compartido de credenciales eficiente, asegúrate de tener lo siguiente para cada plataforma:

Para cada app para Android, haz lo siguiente:

2. Crea el archivo de asociación

Debes crear un archivo assetlinks.json que declare las relaciones entre tu sitio web y tu app. Usa delegate_permission/common.get_login_creds para otorgar permiso para compartir contraseñas y delegate_permission/common.handle_all_urls para habilitar los vínculos directos y compartir llaves de acceso.

Crea un archivo llamado assetlinks.json con el siguiente contenido. Reemplaza los valores de ejemplo por la URL, el nombre del paquete y la huella digital de tu sitio:

[{
  "relation": [
    "delegate_permission/common.handle_all_urls",
    "delegate_permission/common.get_login_creds"
    ],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

3. Aloja el archivo

Sube tu archivo assetlinks.json al directorio .well-known en la raíz de tu dominio.

Ubicación: https://{your-domain}/.well-known/assetlinks.json

Para que el uso compartido de credenciales funcione, tu host de sitio web debe cumplir con los siguientes requisitos:

  • Se puede acceder a la URL a través de HTTPS.
  • El servidor responde con Content-Type: application/json.
  • Se puede acceder a la URL sin redireccionamientos.

De la Web a la app

4. Configura tu app para Android

Ahora, dile a tu app para Android que confíe en el sitio web. Agregarás una referencia en el manifiesto que apunte a un archivo de recursos que contenga tu URL de assetlinks.json.

1. Agrega un recurso de cadena

En res/values/strings.xml, agrega una nueva cadena asset_statements. Ten en cuenta las comillas de escape.

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

2. Agrega metadatos al manifiesto

En AndroidManifest.xml, agrega una etiqueta <meta-data> dentro del elemento <application> que haga referencia a este recurso de cadena:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

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

        <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>

Después de completar estos pasos y publicar una nueva versión de tu app para Android, los administradores de contraseñas que admitan vínculos de recursos digitales (como el Administrador de contraseñas de Google) podrán sugerir credenciales guardadas para www.example.com cuando el usuario intente acceder a com.example.app y viceversa.

4. Verifica la configuración

Antes de realizar el envío, es fundamental que verifiques la configuración de los Vínculos de recursos digitales. Los archivos JSON incorrectos o los archivos a los que no se puede acceder fallarán de forma silenciosa.

Usa la herramienta oficial Generador y validador de declaraciones.

Generador y validador de declaraciones

  1. Ingresa el dominio del sitio y el nombre del paquete de la app.
  2. Haz clic en Probar declaración.
  3. La herramienta verificará si el archivo assetlinks.json está alojado correctamente y contiene la asociación válida.

5. Compartir credenciales entre varios sitios web

De la Web a la app

Si tienes varios sitios web que comparten el mismo sistema de acceso (por ejemplo, example.com y example.co.uk), puedes declararlos como afiliados para que se puedan compartir las credenciales entre ellos.

Compartir contraseñas entre varios sitios web

Para compartir contraseñas entre sitios web, puedes declarar una asociación de web a web con delegate_permission/common.get_login_creds.

Por ejemplo, para que example.com comparta contraseñas con example.co.uk, el archivo assetlinks.json alojado en https://example.com/.well-known/assetlinks.json debe incluir una declaración dirigida a example.co.uk:

[{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "web",
    "site": "https://example.co.uk"
  }
}]

Del mismo modo, https://example.co.uk/.well-known/assetlinks.json debe incluir una instrucción que se dirija a example.com.

Cómo compartir llaves de acceso entre varios sitios web

Para permitir que varios sitios web compartan las mismas llaves de acceso, deben usar el mismo ID de entidad de confianza (ID de RP). En WebAuthn y las llaves de acceso, el ID de RP especifica el alcance de una credencial por nombre de dominio. Cuando creas una llave de acceso, esta se vincula a un ID de RP específico y solo se puede usar en dominios que se encuentren dentro del alcance de ese ID. Definir correctamente tu ID de RP garantiza una experiencia fluida con llaves de acceso en subdominios, orígenes entre sitios y apps para dispositivos móviles propias. Puedes obtener más información para configurar el ID de RP en Understanding Relying Party ID (RP ID). Con las Related Origin Requests, un sitio web puede especificar otros orígenes que tienen permiso para usar su ID de RP, lo que permite que los usuarios reutilicen la misma llave de acceso en varios sitios que usted opera. Ten en cuenta que esto es diferente de compartir llaves de acceso entre un sitio web y una app para Android, lo que usa delegate_permission/common.handle_all_urls en los Vínculos de recursos digitales.

Por ejemplo, si quieres que example.com y example.co.uk compartan llaves de acceso, puedes decidir que example.com sea el ID de RP canónico. Para que esto funcione, example.co.uk debe usar rpId: 'example.com' en sus llamadas a la API de WebAuthn, y example.com debe alojar un archivo en https://example.com/.well-known/webauthn para incluir example.co.uk en la lista de entidades permitidas:

{
  "origins": [
    "https://example.co.uk"
  ]
}

Esto permite que example.co.uk cree y use llaves de acceso asociadas con example.com.

6. Conclusión

¡Felicitaciones! Configuraste correctamente el uso compartido de credenciales eficiente.

Ahora tus usuarios pueden guardar una contraseña y una llave de acceso en tu sitio web, y usarlas para acceder a tu app para Android con un solo toque (y viceversa). Este simple cambio puede aumentar significativamente tus tasas de conversión de acceso y la satisfacción de los usuarios.

Próximos pasos