Esta página se tradujo automáticamente. Lee la versión original en inglés aquí.
| Enfoque | Adopción | Crear claves de acceso | Usar claves de acceso | Gestionar claves de acceso | Complejidad técnica | Soporte OAuth |
|---|---|---|---|---|---|---|
| Implementación nativa | 🟢🟢🟢 | Alta adopción, la mejor experiencia de usuario (UX), biometría fluida | Autenticación instantánea y silenciosa | Control nativo total | Media-Alta | Requiere flujo independiente |
| System WebView | 🟢🟢 | Buena adopción, experiencia similar al navegador | Experiencia de usuario (UX) estándar del navegador, llavero compartido | Gestión basada en navegador | Baja | Excelente |
| Embedded WebView | 🟢 | Menor adopción, requiere más configuración | Soporte nativo para iOS y Android (WebKit 1.12.1+), sin UI condicional | Control limitado | Media-Alta | N/A |
Nota: System WebView y Embedded WebView a menudo se combinan; System WebView gestiona el inicio de sesión (con el uso compartido automático de credenciales) y, luego, Embedded WebView renderiza la gestión de claves de acceso en la configuración.
Factores clave de decisión:
Las plataformas móviles modernas proporcionan tres enfoques distintos para integrar claves de acceso en su aplicación nativa, cada uno con diferentes compromisos en cuanto a experiencia de usuario, complejidad técnica y compatibilidad con OAuth:
Implementación nativa: Construya flujos de claves de acceso directamente en su aplicación utilizando las API de la plataforma (AuthenticationServices en iOS, Credential Manager en Android). Proporciona la mejor experiencia de usuario con autenticación biométrica perfecta, pero requiere un esfuerzo de implementación técnica medio a alto.
System WebView: Utilice el componente de navegador de la plataforma (ASWebAuthenticationSession / SFSafariViewController en iOS, Chrome Custom Tabs en Android) para gestionar la autenticación. Excelente para flujos de inicio de sesión basados en OAuth y comparte credenciales con el navegador del sistema.
Embedded WebView: Integre una vista web personalizable (WKWebView en iOS, WebView en Android) dentro de su aplicación para reutilizar la autenticación web con un esqueleto de aplicación nativa. Proporciona una apariencia similar a la nativa sin barras de URL y un control total sobre la interfaz de usuario de la vista web. Requiere configuración adicional, incluidos permisos y derechos (entitlements) (iOS), y la configuración de WebView con AndroidX WebKit 1.12.1+ (Android) para habilitar la funcionalidad de claves de acceso.
La elección correcta depende de la arquitectura de autenticación de su aplicación, si utiliza proveedores OAuth, cuánto control necesita sobre la interfaz de usuario y si está construyendo primero de forma nativa o reutilizando componentes web.
Whitepaper empresarial de Passkeys. Guías prácticas, patrones de despliegue y KPIs para programas de passkeys.
Artículos recientes
♟️
Por qué necesita observabilidad de autenticación para CIAM
🔑
Explicación de las Device Bound Session Credentials (DBSC)
📖
WebAuthn Relying Party ID (rpID) y claves de acceso: dominios y aplicaciones nativas
♟️
Estrategia de claves de acceso: Por qué fallará su implementación de claves de acceso
♟️
Problemas del día 2 de las claves de acceso: 5 riesgos tras el lanzamiento
Una implementación nativa de claves de acceso proporciona la experiencia de usuario óptima, con flujos de autenticación construidos directamente en la interfaz de usuario de su aplicación utilizando las API específicas de la plataforma. Los usuarios se benefician de los cuadros de diálogo nativos de la plataforma, la verificación biométrica fluida y los tiempos de inicio de sesión más rápidos posibles.
Cuándo elegir la implementación nativa:
preferImmediatelyAvailableCredentials para
mostrar automáticamente una superposición de claves de acceso
cuando las claves de acceso están disponibles, proporcionando la experiencia de inicio
de sesión más rápida sin requerir la entrada del identificadorVentaja clave: preferImmediatelyAvailableCredentials()
Las implementaciones nativas pueden aprovechar preferImmediatelyAvailableCredentials()
para crear una
superposición automática de claves de acceso
que aparece inmediatamente al iniciar la aplicación cuando las claves de acceso están
disponibles. Este flujo sin nombre de usuario proporciona la experiencia de inicio de
sesión más rápida posible: los usuarios ven sus claves de acceso al instante sin ingresar
primero un identificador. Esta capacidad es exclusiva de las implementaciones nativas
y no está disponible en las variantes de WebView.
El siguiente diagrama ilustra cómo la autenticación nativa ofrece un proceso más rápido en comparación con el enfoque de UI condicional de WebView:
La superposición automática nativa proporciona una experiencia de usuario superior con tasas de uso de claves de acceso más altas, ya que la autenticación comienza inmediatamente al iniciar la aplicación, mientras que las implementaciones de WebView requieren que los usuarios interactúen primero con los campos de entrada.
Descripción general de los requisitos técnicos:
La integración nativa de claves de acceso requiere confianza criptográfica entre su aplicación y su dominio web. Sin ella, el sistema operativo rechazará todas las operaciones de WebAuthn. Requisitos clave:
/.well-known/El principal beneficio: las claves de acceso creadas en su sitio web funcionan a la perfección en su aplicación y viceversa.
La implementación nativa de claves de acceso en iOS implica el marco AuthenticationServices de Apple, que proporciona una API para las operaciones de WebAuthn:
Componentes clave:
ASAuthorizationController: Gestiona el flujo de autenticaciónASAuthorizationPlatformPublicKeyCredentialProvider: Crea solicitudes de
clave de accesoConsejos de desarrollo
?mode=developer a su URL
AASA para forzar la obtención de una versión actualizada.La implementación nativa de claves de acceso en Android utiliza la API de Credential Manager (o la API FIDO2 anterior por cuestiones de retrocompatibilidad):
Componentes clave:
CredentialManager: API central para todas las operaciones de credencialesCreatePublicKeyCredentialRequest: Para el
registro de claves de accesoGetCredentialRequest: Para la autenticación con claves de accesoNota: Actualmente, Android carece de las sugerencias de teclado de UI condicional de iOS en aplicaciones nativas (aunque la UI condicional funciona en aplicaciones web).
La implementación nativa de claves de acceso tiene retos importantes y lecciones aprendidas: Integrarlas a nivel del SO puede revelar problemas en diferentes dispositivos y versiones del SO.
Si bien puede implementar claves de acceso utilizando las API directas de la plataforma, los SDK creados específicamente aceleran significativamente el desarrollo al gestionar la complejidad de WebAuthn, los casos extremos y proporcionar telemetría integrada. Los SDK también ofrecen interfaces que se pueden simular para pruebas unitarias (crucial ya que no se pueden probar datos biométricos en simuladores).
Recomendación: Para implementaciones nativas, recomendamos utilizar los SDK de Corbado (iOS Swift Passkey SDK, Android Kotlin Passkey SDK), que gestionan los numerosos casos extremos descubiertos a través de implementaciones en producción, proporcionan telemetría adicional y facilitan las pruebas.
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.
See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.
Read the case studyLos System WebViews utilizan el componente de navegador nativo de la plataforma para gestionar la autenticación dentro de su aplicación. A diferencia de las implementaciones totalmente nativas, los System WebViews muestran el contenido web utilizando el navegador real del sistema (Safari en iOS, Chrome en Android), manteniendo las cookies compartidas, las credenciales guardadas y los indicadores de seguridad del navegador conocidos.
Cuándo elegir System WebView:
Ventajas clave:
Componentes de la plataforma:
ASWebAuthenticationSession (recomendado para flujos de autenticación) o
SFSafariViewController (navegación general)Grandes empresas como Google y GitHub adoptaron este enfoque para añadir el inicio de sesión con claves de acceso a sus aplicaciones móviles a través de superposiciones de WebView en las páginas de autenticación web existentes. Esto funciona bien cuando las reconstrucciones de autenticación totalmente nativas no son factibles de inmediato.
iOS proporciona dos componentes principales de System WebView para la autenticación:
ASWebAuthenticationSession (Recomendado para la autenticación):
SFSafariViewController (Navegación general):
| Característica | ASWebAuthenticationSession | SFSafariViewController |
|---|---|---|
| Caso de uso principal | Flujos de autenticación | Navegación web general |
| OAuth/OIDC | Excelente | Bueno |
| Soporte de claves de acceso | Sí | Sí |
| Personalización | Limitada | Mínima |
Si su aplicación utiliza un inicio de sesión basado en OAuth,
ASWebAuthenticationSession es la opción recomendada, ya que está diseñada
específicamente para escenarios de autenticación y proporciona el mejor equilibrio entre
seguridad y experiencia del usuario.
Chrome Custom Tabs (CCT) proporciona una experiencia de autenticación impulsada por Chrome dentro de su aplicación:
Características clave:
Integración OAuth: Chrome Custom Tabs son el equivalente de Android de ASWebAuthenticationSession de iOS, proporcionando un excelente soporte OAuth al tiempo que mantiene el acceso a las claves de acceso almacenadas.
Prueba passkeys en una demo en vivo.
Embedded WebViews proporciona un control total sobre el contenido web que se renderiza dentro de su aplicación, permitiendo la manipulación directa de cookies, sesiones y la navegación sin barra de URL. Sin embargo, este control viene con requisitos técnicos adicionales para habilitar la funcionalidad de claves de acceso.
Cuándo elegir Embedded WebView:
Contexto importante:
Muchas aplicaciones utilizan un enfoque híbrido: System WebView gestiona la autenticación OAuth inicial (donde las claves de acceso funcionan a la perfección) y, a continuación, cambian a Embedded WebView para después de la autenticación a fin de gestionar las claves de acceso en la configuración. Los desafíos surgen al intentar utilizar claves de acceso directamente dentro de los Embedded WebViews.
Requisitos técnicos:
Los Embedded WebViews requieren una configuración adicional en comparación con los System WebViews:
Componentes de la plataforma:
WKWebViewandroid.webkit.WebViewCompromisos:
Al implementar claves de acceso a través de WebViews, es crucial comprender la distinción entre System WebViews y Embedded WebViews. Los tres enfoques descritos anteriormente (Implementación nativa, System WebView y Embedded WebView) sirven a diferentes casos de uso.
En iOS, tiene múltiples opciones para mostrar contenido web dentro de la aplicación:
En Android, las opciones principales son:
android.webkit.WebView), que es
esencialmente un mininavegador que puede ser incrustado en sus actividades. Es altamente
personalizable pero se ejecuta en el proceso de su aplicación.En las siguientes secciones, profundizaremos un poco más en estos tipos de WebView para iOS y Android, y discutiremos cuáles podrían ser los más adecuados para los flujos de autenticación de claves de acceso.
Suscríbete a nuestro Substack de passkeys para recibir las últimas noticias.
La plataforma de Apple proporciona las tres opciones de WebView enumeradas anteriormente. Su elección afectará la fluidez con la que se pueden usar las claves de acceso dentro de la aplicación:
Para probar el comportamiento de los diferentes WebViews en iOS, recomendamos la aplicación WebView - WKWebView and UIWebView rendering.
WKWebView es un componente WebView versátil para iOS. Los desarrolladores pueden integrar un WKWebView para renderizar contenido web con un alto grado de control sobre la interfaz de usuario y el comportamiento. WKWebView utiliza el mismo motor de renderizado que Safari, por lo que es muy eficiente y admite las funciones web modernas. En teoría, WKWebView puede gestionar WebAuthn (y, por lo tanto, las claves de acceso) si se configura correctamente, pero tenga en cuenta que algunas características avanzadas del navegador podrían estar restringidas por seguridad. Una cosa a tener en cuenta es que WKWebView por defecto no comparte cookies o datos de llavero (keychain) con Safari Móvil. Los usuarios podrían tener que volver a iniciar sesión porque su sesión de WebView está aislada de la sesión de Safari. Además, dado que el contenido de WKWebView puede ser totalmente personalizado por la aplicación, el usuario no ve una barra de direcciones o la interfaz de usuario de Safari, lo que es excelente para la marca, pero significa que el usuario tiene menos indicios para verificar la legitimidad de la página (una preocupación por el phishing). Algunas aplicaciones han llegado a abusar de WKWebView para inyectar scripts o alterar el contenido (por ejemplo, se observó que TikTok inyectaba JS de seguimiento a través de su navegador en la aplicación), por lo que se debe tener cuidado de usar WKWebView de una manera segura y confiable para el usuario.
SFSafariViewController proporciona una experiencia de Safari en la aplicación. Cuando se abre una URL con SFSafariViewController, es casi como abrirla en el navegador Safari real, excepto que el usuario permanece dentro de la interfaz de usuario de su aplicación. La ventaja para las claves de acceso es significativa: debido a que es esencialmente Safari, el llavero de iCloud (iCloud Keychain) del usuario y las claves de acceso guardadas son accesibles. Tenga en cuenta que las cookies no se comparten en iOS 11+. Esto significa que si el usuario ya tiene una clave de acceso para su sitio, Safari puede encontrarla e incluso mostrar el autocompletado de la UI Condicional para facilitar el inicio de sesión. SFSafariViewController es menos personalizable (no puede cambiar mucho su barra de herramientas), pero gestiona automáticamente muchas características de seguridad y privacidad. Se muestra la barra de URL, completa con el icono de candado para HTTPS, lo que da a los usuarios la confianza de que están en el dominio correcto. En general, SFSafariViewController se considera más seguro que un WKWebView estándar y es más fácil de implementar (Apple lo proporciona de forma sencilla). La principal contrapartida es que se sacrifica parte del control sobre el aspecto y el diseño. Para un flujo de autenticación, eso es habitualmente aceptable. La prioridad aquí es la seguridad y la facilidad de inicio de sesión, en las que SFSafariViewController sobresale al utilizar el contexto de Safari.
| WKWebView | SFSafariViewController | |
|---|---|---|
| Experiencia de usuario | - Sensación nativa: Los usuarios podrían sentir que el contenido web es una parte nativa de la aplicación porque los desarrolladores pueden personalizar el aspecto para que coincida con el diseño de la aplicación. - Autocompletado: Es posible el autocompletado con datos de Safari. | - Transparente: Experiencia de usuario transparente (seamless) al utilizar la configuración de Safari del usuario, lo que garantiza una navegación web coherente entre la aplicación nativa y el navegador. |
| Experiencia del desarrollador | - Altamente personalizable: Amplias opciones de personalización y configuración disponibles. - Flexible: Muchas API para interactuar con el contenido web. | - Personalización media: Opciones de personalización limitadas, especialmente en comparación con WKWebView. - Sencillo: Más sencillo de implementar en comparación con WKWebView. |
| Rendimiento | - Más bien lento: Dependiendo de la implementación y el contenido web, las velocidades de carga se pueden optimizar, pero podrían seguir siendo más lentas en comparación con SFSafariViewController debido al procesamiento adicional de funciones e interacciones personalizadas. | - Más bien rápido: Por lo general, ofrece un mejor rendimiento, ya que aprovecha el motor de Safari, que está optimizado para la velocidad y la eficiencia, lo que proporciona tiempos de carga rápidos para las páginas web. |
| Confianza y reconocimiento | - La visualización de la URL no es obligatoria: WKWebView a menudo no muestra la URL, lo que dificulta que los usuarios verifiquen la página web. Existe la posibilidad de que aplicaciones maliciosas imiten este comportamiento y lleven a cabo el phishing de credenciales. | - Experiencia similar a la del navegador: Representa (renderiza) páginas web utilizando Safari, proporcionando una experiencia "similar a la del navegador". Los usuarios pueden ver la URL y acceder a las funciones de autocompletado de Safari, lo que podría infundir más confianza debido a la interfaz familiar. |
| Aislamiento | - Separado: Las cookies y sesiones están separadas de Safari; los usuarios no iniciarán sesión automáticamente en un WKWebView. | - Separado: Las cookies y sesiones están separadas de Safari; los usuarios tampoco iniciarán sesión automáticamente en SFSafariViewController. |
| Vulnerabilidades | - Seguro: Intrínsecamente seguro gracias al aislamiento de aplicaciones (sandboxing) de Apple, pero el comportamiento y la seguridad dependen de la implementación de la aplicación. Posibles vulnerabilidades si no se implementa correctamente. | - Más seguro: Se beneficia de las funciones de seguridad integradas de Safari, incluidas las advertencias sobre sitios web maliciosos y anti-phishing. Generalmente se considera más seguro para mostrar contenido web que WKWebView debido a estas características y a la familiaridad del usuario con Safari. |
| Otros | - Características no disponibles: Es posible que no se pueda acceder plenamente a algunas funciones del navegador (por ejemplo, WebAuthn) debido a problemas de seguridad y a que WKWebView se ejecuta en el contexto de la aplicación. - Inyección de JavaScript: Algunas aplicaciones, por ejemplo, TikTok, inyectan JavaScript de seguimiento en su WKWebView dentro de la aplicación o restringen el control del usuario (por ejemplo, Facebook). - Problemas de privacidad: Hay más comentarios de la comunidad en relación con la privacidad. | - Sin inyección de JavaScript: No permite la ejecución de JavaScript desde la aplicación, mejorando la seguridad y la privacidad. Además, no es compatible con las alertas de JavaScript o confirmaciones, lo que podría afectar a la experiencia del usuario en ciertas páginas web. - Modo lectura: Proporciona un modo lectura para una versión limpia y fácil de leer de los artículos. |
SFAuthenticationSession / ASWebAuthenticationSession – Estas clases (siendo esta última el nombre más reciente, compatible con Swift) se crean específicamente para flujos de inicio de sesión como OAuth u OpenID Connect. Cuando necesita autenticar a un usuario a través de una página web (tal vez ante un IdP externo), estas sesiones son la opción recomendada en iOS. Son muy similares a SFSafariViewController, ya que utilizan el navegador Safari por debajo y comparten cookies/almacenamiento con Safari. La diferencia clave es que SFAuthenticationSession siempre indicará al usuario que la aplicación desea autenticarse mediante una página web (para que el usuario sea consciente) y utilizará automáticamente la sesión de Safari existente del usuario si está disponible.
El beneficio es una experiencia de SSO fluida: si el usuario ya ha iniciado sesión en el proveedor en Safari, esta sesión puede utilizar esa cookie para evitar otro inicio de sesión. Para las claves de acceso, esto es importante porque significa que cualquier credencial de clave de acceso almacenada en Safari/iCloud Keychain se puede usar aquí también. La orientación oficial de Apple es utilizar ASWebAuthenticationSession para cualquier cosa que parezca un flujo de inicio de sesión. Las ventajas son la mejora de la privacidad (su aplicación nunca ve las credenciales o las cookies, Safari lo gestiona) y la compatibilidad con SSO integrada. La desventaja es que se limita a los flujos de autenticación (no se usaría simplemente para renderizar contenido web arbitrario en su aplicación). En resumen, si elige un enfoque WebView en iOS, ASWebAuthenticationSession es habitualmente la mejor opción para implementar claves de acceso porque es seguro, comparte el estado con Safari y está diseñado específicamente para la autenticación.
Consulta cuántas personas usan passkeys realmente.
En Android, la decisión sobre el WebView es entre el WebView clásico y Chrome Custom Tabs:
Para probar el comportamiento de los diferentes WebView en Android, recomendamos la aplicación WebView vs Chrome Custom Tabs.
Android WebView (android.webkit.WebView) es un componente que le permite incrustar páginas web en el diseño de su actividad (activity layout). Es similar a WKWebView en el sentido de que le otorga control total: puede interceptar la navegación, inyectar JavaScript, personalizar la interfaz de usuario, etc. También se ejecuta dentro del proceso de su aplicación. El uso de WebView para las claves de acceso significa que su aplicación carga su página de inicio de sesión web, y esa página puede iniciar una ceremonia de clave de acceso WebAuthn. El Android WebView moderno sí admite WebAuthn (siempre que la implementación de WebView del dispositivo esté actualizada a través de Android System WebView o el componente de Chrome). Una consideración importante: por defecto, un Android WebView no comparte cookies ni credenciales guardadas con el navegador Chrome del usuario. Por lo tanto, cualquier clave de acceso creada o utilizada en el WebView podría no ser conocida por Chrome, y viceversa. Este aislamiento puede ser bueno para la seguridad (su aplicación no puede leer las cookies del navegador), pero podría obligar a los usuarios a iniciar sesión de nuevo si ya se han autenticado en Chrome. Otro problema es la confianza. Un WebView simple no muestra la URL ni el icono de candado SSL, por lo que los usuarios tienen que confiar completamente en su aplicación para no ser víctimas de phishing. Google ha llegado a prohibir el uso de WebView para inicios de sesión con Google OAuth debido a los posibles riesgos de phishing. En cuanto al rendimiento, los WebViews están bien, pero pueden ser más lentos o requerir más memoria que el uso del navegador predeterminado del usuario, especialmente si se cargan páginas pesadas.
Las Chrome Custom Tabs (CCT) son un enfoque híbrido. Permiten que su aplicación abra una página renderizada por Chrome que parece formar parte de su aplicación. Puede personalizar el color de la barra de herramientas, añadir un logotipo de la aplicación, etc., pero el contenido es renderizado por Chrome en un proceso independiente. Para las claves de acceso, las CCT tienen varias ventajas: comparten las cookies del usuario y las credenciales con Chrome, lo que significa que si el usuario tiene una clave de acceso guardada a través de Chrome (Google Password Manager), la Pestaña Personalizada puede acceder a ella. El usuario también verá la URL real y los indicadores de seguridad, lo que genera confianza. El rendimiento es a menudo mejor: Chrome se puede "precalentar" en segundo plano para una carga más rápida. Y lo que es más importante, la seguridad es sólida: como se trata esencialmente de la aplicación de Chrome, aspectos como la Navegación Segura (Safe Browsing) de Google protegen la sesión, y su aplicación no puede inyectar scripts arbitrarios en la página (evitando ciertos ataques).
La desventaja es que requiere que el usuario tenga Chrome (o un navegador compatible) instalado y actualizado. La mayoría de los usuarios de Android lo tienen, pero en algunos dispositivos de ciertas regiones, esto podría ser un problema. En general, si opta por un enfoque web incrustado en Android, se recomiendan las Chrome Custom Tabs para los flujos de claves de acceso, ya que proporcionan un buen equilibrio de integración y seguridad. De hecho, son análogas a SFSafariViewController/ASWebAuthSession en iOS en muchos sentidos: aprovechan el navegador predeterminado para la autenticación.
(Como nota al margen: El enfrentamiento WKWebView de Apple frente a SFSafariViewController y WebView de Android frente a CCT tienen muchos paralelismos. Tanto Safari VC como Chrome Tabs comparten el estado del navegador y brindan mejor seguridad, mientras que WKWebView/Android WebView dan más control pero aíslan el contenido web. Para las claves de acceso, compartir el estado (cookies, almacenes de credenciales) es generalmente lo deseable para que se pueda acceder a la clave de acceso y crearla sin problemas.)
| Característica | WebView | Chrome Custom Tab |
|---|---|---|
| Experiencia de usuario | - Flexibilidad: Proporciona un amplio conjunto de API para interactuar con el contenido web y gestionar las interacciones del usuario, incluido el manejo de cuadros de diálogo de JavaScript y las solicitudes de permisos. - Coherencia: Gestionar una experiencia de usuario consistente, especialmente con contenido web variado, puede ser un desafío. | - Características del navegador: Comparte características como el Ahorro de Datos y la Sincronización de Autocompletado en varios dispositivos. - Botón de retroceso: Permite a los usuarios volver fácilmente a la aplicación con un botón de retroceso integrado. - Dependencia: Se basa en la aplicación de Chrome, que puede no estar disponible o actualizada en todos los dispositivos de los usuarios. - Redirección al navegador: Ciertas funcionalidades pueden redirigir a los usuarios a la aplicación Chrome, interrumpiendo potencialmente la experiencia del usuario. - Custom Tabs parciales: Solo una parte de la pantalla se puede usar para la Chrome Custom Tab mientras que el resto muestra la aplicación nativa. - Panel lateral: En modo horizontal y en dispositivos de pantalla grande, la Chrome Custom Tab solo se muestra en un lado de la pantalla, mientras que el resto de la pantalla muestra la aplicación nativa. |
| Experiencia del desarrollador | - Altamente personalizable: Ofrece amplias opciones/necesidades de personalización. - Interactividad: Proporciona numerosas API para interactuar con el contenido web y gestionar las interacciones del usuario. | - Personalizable: Permite personalizar el color de la barra de herramientas, el botón de acción, la barra de herramientas inferior, los elementos del menú personalizado y las animaciones de entrada/salida. - Callback: Emite un callback a la aplicación en una navegación externa. - Características de seguridad: Proporciona funciones integradas, eliminando la necesidad de administrar solicitudes, concesiones de permisos o almacenes de cookies. |
| Rendimiento | - Rendimiento mediocre: Puede no ofrecer el mismo nivel de rendimiento que Chrome Custom Tabs (CCT). | - Precalentamiento: Incluye el precalentamiento del navegador en segundo plano y la carga especulativa de las URL para mejorar el tiempo de carga de la página. - Prioridad: Evita que las aplicaciones que inician una Custom Tab sean expulsadas de memoria (evicted) durante su uso elevando su importancia al nivel de "primer plano" (foreground). |
| Confianza y reconocimiento | - URL y SSL no visibles: La información de la URL y del SSL no son inherentemente visibles en un WebView. A menos que el desarrollador de la aplicación implemente estas funciones, los usuarios no sabrán si se encuentran en el sitio web correcto o en uno de suplantación de identidad (phishing). | - URL y SSL visibles: Usa el navegador Chrome real para mostrar las páginas. Los usuarios pueden ver la URL y el certificado SSL (que indica si la conexión es segura). Esto puede dar confianza a los usuarios de que no se encuentran en un sitio de phishing. |
| Aislamiento | - Se ejecuta dentro del proceso de la aplicación: Si una aplicación tiene una vulnerabilidad que permite la ejecución de código malicioso, existe el riesgo de que el WebView pueda verse comprometido. Sin embargo, WebView también recibe actualizaciones, pero su comportamiento y seguridad pueden ser más dependientes de la aplicación que lo usa. - Sin intercambio de cookies/sesiones: No comparte cookies o sesiones con el navegador principal del dispositivo, lo que ofrece aislamiento pero posiblemente exija a los usuarios que inicien sesión de nuevo. | - Se ejecuta dentro del proceso de Chrome: Al formar parte de Chrome, las Custom Tabs se ejecutan en el mismo proceso y tienen las mismas actualizaciones de seguridad y características que Chrome. - Tarro de cookies y modelo de permisos compartidos: Asegura que los usuarios no tengan que volver a iniciar sesión en los sitios o volver a conceder permisos. - Ajustes y preferencias de Chrome: Utiliza los ajustes y preferencias de Chrome. |
| Vulnerabilidades | - Callbacks para robar credenciales: Las posibles vulnerabilidades incluyen que a veces se requiere JavaScript que abre la puerta a que otras aplicaciones ejecuten código malicioso, como registrar callbacks que intentan interceptar nombres de usuario y contraseñas. - Phishing: Además, una aplicación maliciosa podría abrir otra página web que imite el flujo de un Enlace en un intento de phishing. | - Navegación segura de Google (Safe Browsing): Emplea la Navegación Segura de Google para proteger tanto al usuario como al dispositivo de sitios peligrosos. - Decoración segura del navegador: Garantiza que el usuario siempre vea la URL exacta con la que está interactuando y pueda ver la información del certificado del sitio web, lo que reduce el riesgo de phishing. Además, las Custom Tabs no permiten la inyección de JavaScript. |
| Otros | - Google prohibió los WebViews para iniciar sesión a los usuarios en cuentas de Google. |
Independientemente del enfoque de implementación que elija, se deben cumplir ciertos requisitos técnicos para habilitar la funcionalidad de claves de acceso. Esta sección proporciona una guía exhaustiva sobre cómo configurar archivos de asociación well-known (conocidos), derechos de iOS (entitlements) y configuración de WebView en Android.
Nota sobre los dispositivos gestionados: El comportamiento de las claves de acceso cambia significativamente en los dispositivos gestionados donde las políticas de Gestión de Dispositivos Móviles (MDM) controlan el almacenamiento de credenciales. Para probar claves de acceso en dispositivos gestionados, consulte Claves de acceso en dispositivos gestionados con iOS y Android.
Los flujos nativos y de Embedded WebView requieren archivos de asociación para establecer la confianza criptográfica entre su aplicación y su dominio web. System WebView (ASWebAuthenticationSession) y Chrome Custom Tabs no requieren asociación de aplicación a sitio.
El archivo AASA establece la conexión entre su aplicación iOS y su dominio web, permitiendo que las claves de acceso funcionen en ambas plataformas.
Ubicación del archivo: https://sudominio.com/.well-known/apple-app-site-association
Requisitos de configuración:
/.well-known/apple-app-site-association de su dominioapplication/json.well-knownEjemplo de archivo AASA:
{ "webcredentials": { "apps": ["TEAMID123.com.example.app"] } }
Almacenamiento en caché de AASA y pruebas:
Apple almacena en caché de forma muy agresiva los archivos AASA (hasta 24-48 horas) utilizando una CDN, lo que puede frustrar el desarrollo y las pruebas. Para evitar el almacenamiento en caché durante el desarrollo:
?mode=developer a su dominio asociado en Xcode.⚠️ Importante: NO use ?mode=developer en los lanzamientos de producción. Este
parámetro es solo para el desarrollo; si se utiliza en producción, impedirá que iOS
detecte correctamente su archivo AASA, lo que romperá la funcionalidad de claves de
acceso.
Validación: Use el validador AASA de Apple para verificar su configuración.
Android utiliza Digital Asset Links para verificar la relación entre su aplicación y el sitio web.
Ubicación del archivo: https://sudominio.com/.well-known/assetlinks.json
Requisitos de configuración:
/.well-known/assetlinks.json de su dominioapplication/jsonEjemplo de archivo assetlinks.json:
[ { "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": [ "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99" ] } } ]
Validación: Use el generador de Digital Asset Links de Google para crear y verificar su configuración.
Las aplicaciones de iOS requieren derechos adecuados para acceder a la funcionalidad de claves de acceso. Los requisitos difieren ligeramente en función de su enfoque de implementación.
El archivo de derechos (frecuentemente llamado Runner.entitlements en aplicaciones
Flutter o YourApp.entitlements en proyectos nativos de
iOS) define permisos y capacidades especiales concedidos por el sistema de Apple. Para las
claves de acceso, este archivo configura los Dominios Asociados (Associated Domains).
Ubicación del archivo: Normalmente en su proyecto Xcode en
ios/Runner/Runner.entitlements
La implementación nativa y Embedded WebView requieren la capacidad Associated Domains para vincular su aplicación con su dominio web. System WebView (ASWebAuthenticationSession) no lo requiere ya que se ejecuta en el contexto de Safari.
Configuración en Xcode:
webcredentials:Ejemplo de configuración:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.associated-domains</key> <array> <string>webcredentials:sudominio.com</string> <string>webcredentials:subdominio.sudominio.com</string> </array> </dict> </plist>
| Enfoque | Requiere Dominios Asociados (Associated Domains) | Configuración adicional |
|---|---|---|
| Implementación nativa | Sí | Implementación dedicada |
| System WebView | No requerido | La configuración web predeterminada funciona |
| Embedded WebView | Sí | Requiere la configuración de AndroidX WebKit 1.12.1+ |
Varios dominios: Si su aplicación necesita funcionar con varios dominios, es posible que necesite Solicitudes de orígenes relacionados (Related Origin Requests, ROR).
Android Embedded WebViews admite claves de acceso a través de dos enfoques distintos: el enfoque más nuevo basado en WebKit (Sección 5.3.1) y el enfoque más antiguo de puente JavaScript (Sección 5.3.2). System WebView (Chrome Custom Tabs) no requiere ninguna configuración: las credenciales funcionan de manera automática.
Android proporciona ejemplos oficiales de claves de acceso en WebView que demuestran ambos enfoques de implementación.
Integración moderna de WebKit con la gestión nativa de claves de acceso. Este enfoque proporciona soporte nativo de WebAuthn sin requerir un código de puente personalizado.
Ejemplo oficial: Webkit WebView MainActivity
Requisitos:
Implementación:
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebViewFeature // Check if Web Authentication is supported if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) { // Enable Web Authentication WebSettingsCompat.setWebAuthenticationSupport( webView.settings, WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP ) // Enable JavaScript webView.settings.javaScriptEnabled = true }
Puntos clave:
WebViewFeature.WEB_AUTHENTICATION en tiempo de ejecuciónmediation:"conditional" (autocompletado de la
clave de acceso en los campos de entrada) no funciona en Embedded WebViewNotas sobre versiones:
Antes de AndroidX WebKit 1.12.0, no existía el soporte nativo para WebAuthn en Embedded WebView. Este enfoque anterior utiliza un puente de Web a Nativo para gestionar las claves de acceso en dispositivos que carecen del soporte nativo para WebAuthn en WebView.
Ejemplos oficiales:
Cuándo utilizarlo: Al brindar soporte a versiones anteriores de Android o dispositivos con implementaciones heredadas de WebView.
Los equipos tenían que, o bien:
Para ver la implementación detallada, consulte la Guía de integración de Credential Manager con WebView de Android. Sin embargo, recomendamos encarecidamente utilizar el enfoque nativo de WebKit 1.12.1+ para las aplicaciones modernas.
Recomendación: Utilice el soporte nativo de WebAuthn con AndroidX WebKit 1.12.1+. Si no está disponible en tiempo de ejecución, recurra a Chrome Custom Tabs, que proporciona un excelente soporte para las claves de acceso con credenciales compartidas.
Al implementar claves de acceso en aplicaciones nativas, debe establecer la confianza entre su aplicación y los dominios web. Esta sección describe cómo manejar un solo dominio, varios dominios relacionados (ROR) y cómo verificar que sus archivos de asociación well-known estén configurados correctamente.
Para aplicaciones que usan un solo dominio (por ejemplo, kayak.com), necesita:
webcredentials:kayak.comLos
Orígenes Relacionados
(Related Origins, ROR) es una
característica de WebAuthn que permite que un único conjunto de claves de acceso funcione
en múltiples dominios relacionados (por ejemplo, kayak.com, kayak.de, kayak.co.uk).
ROR utiliza el punto final
(endpoint) /.well-known/webauthn en cada sitio para definir los
orígenes relacionados,
NO los archivos AASA ni assetlinks.
Puntos clave:
/.well-known/webauthn con la lista de
orígenes relacionados.Ejemplo de configuración:
Si su aplicación funciona con kayak.com y kayak.de, ambos dominios deben:
Antes de poner su solución en marcha, verifique que sus archivos well-known estén configurados correctamente y sean accesibles. Apple y Google proporcionan direcciones URL de prueba basadas en sus CDN para comprobar la disponibilidad de los archivos:
| Dominio | Verificación de AASA de Apple | Verificación de Digital Asset Links de Google |
|---|---|---|
| kayak.com | Probar archivo AASA Compruebe si el CDN de Apple puede recuperar su archivo | Probar assetlinks.json Verifique que Google puede acceder a sus enlaces a los activos |
| kayak.de | Probar archivo AASA Compruebe si el CDN de Apple puede recuperar su archivo | Probar assetlinks.json Verifique que Google puede acceder a sus enlaces a los activos |
Uso de estas URL de prueba:
?nocache=1 de Apple fuerza una obtención reciente, pasando por alto la
memoria caché del CDNkayak.com o kayak.de por su(s) propio(s) dominio(s) en los patrones de URL
anteriores.Cuidado al probar: Asegúrese de que todos los dominios tengan los archivos well-known configurados correctamente. Un archivo faltante o mal configurado en cualquier dominio puede estropear la funcionalidad de la clave de acceso en ese dominio.
Más información: El ID de parte usuaria (Relying Party ID) de WebAuthn en aplicaciones nativas
La elección del enfoque de implementación correcto depende de la arquitectura de autenticación de su aplicación, los requisitos de OAuth y la necesidad de tener control sobre la sesión. Utilice este árbol de decisión para determinar el mejor camino a seguir.
El siguiente diagrama de flujo lo guía para que seleccione el enfoque de implementación correcto en función de los requisitos de su aplicación:
Referencia rápida para cada ruta:
A continuación se muestra el rendimiento de cada enfoque en las dimensiones clave:
| Enfoque | Creación de claves de acceso | Uso de claves de acceso | Gestión de claves de acceso | Complejidad técnica | Soporte de OAuth | Tiempo de configuración |
|---|---|---|---|---|---|---|
| Implementación nativa | Alta adopción Biometría perfecta, mejor UX | Instantáneo, silenciosopreferImmediatelyAvailableCredentials permite una superposición automática al inicio de la app | Control nativo total Integración en los ajustes de la app | Media-Alta API específicas de la plataforma | Requiere la implementación de un flujo OAuth separado | Semanas a meses |
| System WebView | Buena adopción Experiencia como en el navegador, familiar | UX de navegador estándar UI condicional en los campos de entrada, llavero compartido | Basada en navegador Los usuarios gestionan por medio del navegador | Baja Mínimo de código nativo | Excelente Construido específicamente para OAuth | Días a semanas |
| Embedded WebView | Adopción inferior Requiere configuración | Soporte de WebAuthn nativo WebKit 1.12.1+, sin UI Condicional | Control limitado Sin integración nativa | Media-Alta Configuración de WebView + permisos | Requiere configuración | 1-2 semanas |
Explicación de las dimensiones:
Recomendado: System WebView
Si su aplicación se autentica mediante OAuth2, OIDC o proveedores de inicio de sesión social (Google, GitHub, Microsoft, etc.), System WebView es la opción óptima:
ASWebAuthenticationSession está diseñado específicamente para los flujos de
OAuth.Ejemplo: Aplicaciones de Viajes como kayak.com y kayak.de utilizan OAuth para la autenticación. System WebView les permite mantener su infraestructura actual de OAuth añadiendo al mismo tiempo el soporte a las claves de acceso mediante sus páginas de autenticación web.
Recomendado: Enfoque híbrido
Use System WebView para la autenticación OAuth inicial, y luego Embedded WebView para las sesiones posteriores a la autenticación:
Cuándo usarlo: En aplicaciones que se autentican a través de OAuth y que luego necesitan mostrar contenido web autenticado en donde se requiere una manipulación directa de la sesión.
Recomendado: Implementación nativa
¿Lo está construyendo desde cero o tiene pantallas nativas? Adopte la solución totalmente nativa:
preferImmediatelyAvailableCredentials para mostrar
la superposición automática de claves de acceso en el inicio de la app -
algo exclusivo de las implementaciones nativas que proporciona las tasas de conversión
más altas.Para aplicaciones nuevas: Recomendamos encarecidamente crear el inicio de sesión nativo desde el primer día. Lo prepara para obtener una UX óptima y evita migraciones futuras de WebView al entorno nativo.
Recomendado: Migración por fases
El siguiente diagrama muestra el camino de la migración gradual:
Cada fase se basa en la anterior, permitiendo mejoras graduales sin interrumpir a los usuarios que ya la usan.
| Requisito | Nativa | System WebView | Embedded WebView |
|---|---|---|---|
| Archivos Well-known (AASA/assetlinks) | Requerido | No requerido | Requerido |
| Dominios Asociados (Associated Domains) en iOS | Requerido | No requerido | Requerido |
| Biblioteca WebKit de Android | No aplicable | No requerido | Requerido (1.12.1+) |
| ID de parte usuaria (Relying Party ID) | Debe coincidir con el dominio | Debe coincidir con el dominio | Debe coincidir con el dominio |
Consulte la Sección 5 para conocer las instrucciones de configuración al detalle.
La prueba de claves de acceso en aplicaciones nativas requiere un enfoque estructurado y en varias capas. Siga la pirámide de pruebas: pruebas unitarias (lógica aislada), pruebas de integración (ceremonia de WebAuthn en simuladores o emuladores) y pruebas del sistema (de principio a fin en dispositivos físicos).
Categorías de pruebas imprescindibles:
Si desea contar con una guía de comprobación de lo más completa, incluidas estrategias de automatización, los trucos por plataforma y la lista de control total de elementos previos, no dude en consultar la guía específica que le ofrecemos: Prueba de flujos de claves de acceso en las aplicaciones nativas de iOS y Android.
Tenga en cuenta la posibilidad de sugerir a sus usuarios que se hagan con una clave de acceso después del inicio de sesión habitual y correcto (contraseña o OAuth). Este planteamiento de conversión lenta:
Ejemplo: Después del inicio de sesión de tipo OAuth por medio de un System WebView, aparezca una instrucción nativa del tipo: "¿Dar paso al inicio rápido de sesión a través de Face ID?". En caso de que se afirme, se genera la clave de acceso a través de la página web que se haya activado en el System WebView.
El dirimir de qué forma se aplican las claves de acceso (mediante Implementación nativa, System WebView o Embedded WebView) constituye una determinación estructural determinante para la seguridad, el grado de confort del usuario y el nivel de sofisticación del desarrollo. No existe algo así como un patrón perfecto de uso general.
Para las aplicaciones que dependan de OAuth: System WebView (ASWebAuthenticationSession o Chrome Custom Tabs) sería el punto de inicio que se aconseja. Proporciona una ayuda de inmejorable categoría frente a OAuth, una demanda de aplicación de mínimos y se comparte, por sí mismo, de forma automática las credenciales.
Para aquellas que anteponen en todo momento el funcionamiento nativo: Actúe de la
forma más nativa que le resulte posible, a la máxima celeridad. El entrar como una
aplicación nativa permite un acceso dotado del máximo confort, del que no existen
comparativas posibles, a partir de funciones propias a las que no tendría acceso otra
modalidad que no fuera la nativa. Sería el caso del elemento
preferImmediatelyAvailableCredentials, que despliega la
pantalla de claves de acceso de forma automática en los compases de inicio de la app,
algo que las ejecuciones de tipo WebView ni tan siquiera pueden imaginar. Al proporcionar
en la actualidad y por parte del sistema iOS, al igual que del Android, de un abrigo de lo
más notable para las claves de acceso, estas implementaciones están sumando triunfos
tangibles en entornos reales que no hacen sino probar su altísima acogida entre los
usuarios. Todas y cada una de las herramientas de aplicación (y de paso los SDK propios
del entorno del código libre o bien las librerías propias del entorno informático) han ido
perfeccionándose hasta un punto en que la agregación del entorno nativo sea ya algo
completamente abordable dentro de unos márgenes de tiempo nada irrazonables. Bien es
cierto que no podemos olvidar los preceptos rectores sobre la gobernanza y gestión de los
dispositivos, el acomodo en varios terminales o a qué tipo de suministradores exteriores
estamos acudiendo; ahora bien, todos los envites pueden mitigarse a nada que medie una
ingeniería rigurosa y a base de un régimen pormenorizado de exámenes. Una vez efectuado
esto obtendremos como premio un acceso a las aplicaciones tan ágil y liviano que provocará
la admiración en todo su espectro y por añadidura, un robustecimiento innegable de la
vertiente relacionada con la seguridad.
En caso de exigencia sobre tramas Embedded WebView: El caso del Embedded WebView hace presencia regular bajo un par de escenarios tangibles del mundo real. A modo de primera pauta de actuación, las aplicaciones subordinadas a la exigencia del OAuth, tiran en buena medida de un System WebView como paso inicial a todo el proceso del acceso, desplazándose acto seguido hacia el escalón correspondiente del Embedded WebView para que allí, en los recovecos de todo el apartado relativo a las configuraciones, donde deba quedar atada toda orden vinculada con las sesiones se ejecuten y tomen cuerpo todas las opciones tendentes a gobernar las citadas claves, a expensas de que ciertas aplicaciones allanan de forma importante tales vericuetos para así perpetuar durante todas las vicisitudes un único System WebView. El segundo escenario nos pone frente al hecho de las aplicaciones que habían encajado en su día al inicio del proceso unas tramas WebView, antes incluso de su asimilación de las claves y se empeñan ahora en no renunciar al antedicho dibujo de comportamiento para que prime ante cualquier circunstancia la congruencia. Una orden Embedded WebView a la que acompañe un abrigo del WebAuthn de formato nativo (AndroidX WebKit 1.12.1+) acarrearía sus propias configuraciones (al amparo de permisiones, derechos o un control desde el WebView) mas no demandaría bajo un mismo contexto de un particular y adusto código anclado en JavaScript. Haga memoria frente a todo esto de la total invalidez a efectos técnicos del modelo de UI Condicional, dentro de este Embedded WebView. Sírvase usted mismo de la citada elección en cuantas oportunidades precise de prolongar hacia el futuro un enramado previo o bien en toda situación de exigencia y requerimiento forzoso del gobierno y mando respecto de la cookie/sesión durante el periplo de pantallas tras la autenticación.
Puestas así las cosas, queda constatado que las citadas claves, de cara a esas mismas aplicaciones que se precien de la marca de nativas, evidencian un formidable salto en términos cualitativos referenciados al bienestar del interviniente, tanto como de la ineludible seguridad de la totalidad del formato. Póngase como se ponga uno y con independencia del sendero escogido, ya fuere desde una solución netamente Nativa o a partir de un recurso a un System WebView o aun incluso por la traza del Embedded WebView, no existe género de dudas en que neutralizan a base de bien todos los peligros originados por aquellas malas artes del tipo phishing y destierran a idéntica o mayor celeridad el incordio derivado de gobernar a mano y a modo artesano de incontables palabras reservadas que asedian, como quien dice, a todo hijo de vecino en la inmensidad de esta intrincada y basta Red. Un muestreo en directo del modo y manera de proceder relativo a estos casos (véase el de la asociación nativa dentro de esa otra aplicación regida por la firma VicRoads) dejan sobrada constancia del hecho palpable que aquellos que confían a ciegas y abrazan este proceder nativista recogen luego el tributo a sus afanes, acaparando el fervor absoluto en lo referido a su uso y no digamos si esto se remata, de igual forma que en este caso concreto, con florituras del empaque del uso automatizado y recurrente de una cortina al encender. Haciendo uso del camino pautado y de su abecedario en esta disciplina del trato al prójimo que hace honor a eso de no amargarle a nadie la jornada en todo paso donde la autenticidad sea clave, a lo que habría de unírsele una adopción resuelta para una acometida de los trabajos y del acopio que mejor calcen los designios y contornos del arquitecto: priorizar un planteamiento nativo desde el primer rayo de luz al despuntar una creación, la senda del System WebView tratándose del universo OAuth o del tan cacareado Embedded WebView para pergeñar los enmarañamientos por venir de este formato propio y característico; podrá alzar la voz para prometer un universo ausente del vocablo contraseña, de un acceso regido por las leyes ineludibles de lo corpóreo para que a fin de cuentas asome por todo su derecho la grandilocuencia real y auténtica de lo que habría de ser la promesa primigenia de estas llaves: dar con una puerta simple, segura de pleno derecho y deleite pleno que deba ser el certificar todo el trasiego del individuo en cualquier momento y rincón por igual.
Si las claves de acceso no funcionan en su aplicación nativa, compruebe estos problemas habituales por enfoque de implementación:
application/json.well-knownhttps://su-dominio.com (no app://)webcredentials:sudominio.comASWebAuthenticationSession (recomendado) o
SFSafariViewController?mode=developer durante el desarrollo (quitar en producción)WebViewFeature.WEB_AUTHENTICATIONsetWebAuthenticationSupport() con
WEB_AUTHENTICATION_SUPPORT_FOR_APP"NotAllowedError: The request is not allowed by the user agent or the platform in the current context"
setWebAuthenticationSupport()No aparece el indicador de clave de acceso
?mode=developer en iOS para
pruebas, verificar el tipo de WebViewPara una depuración detallada, consulte nuestro artículo sobre IDs de parte usuaria (Relying Party IDs) en aplicaciones nativas.
Un error común: los entornos de preparación (staging) con acceso restringido (listas blancas de IP, solo VPN) fallarán porque las CDN de Apple y Google deben poder recuperar sus archivos de asociación.
https://app-site-association.cdn-apple.com/a/v1/su-dominio-staging.com?nocache=1https://digitalassetlinks.googleapis.com/v1/statements:list/?source.web.site=https://su-dominio-staging.com&relation=delegate_permission/common.handle_all_urlsSubdominio de staging con el rpID de producción:
Si su entorno de preparación (p. ej., stg.login.ejemplo.com) utiliza el dominio de
producción como rpID (p. ej., ejemplo.com), la búsqueda de AASA se realiza en el
dominio del rpID, no en su subdominio de preparación. Esto significa:
Ejemplo (varios entornos compartiendo un solo AASA):
{ "webcredentials": { "apps": [ "TEAMID123.com.example.app", "TEAMID123.com.example.app.dev", "TEAMID123.com.example.app.stg", "TEAMID123.com.example.app.pre" ] } }
Recomendación: Utilice un rpID de preparación separado que coincida con su dominio de preparación para evitar la superposición de credenciales entre entornos. Esto requiere archivos AASA públicamente accesibles en el dominio de preparación.
Aclaración sobre ?mode=developer:
El parámetro ?mode=developer en Dominios Asociados evita la caché de la CDN de Apple
pero no evita el requisito de accesibilidad. Su archivo AASA aún debe ser accesible
desde el dispositivo (no a través de la CDN de Apple, sino de forma directa). Esto ayuda
durante el desarrollo cuando se itera sobre los cambios de AASA, pero no ayudará si su
servidor de preparación tiene una lista blanca de IPs.
SDK nativos de Corbado:
Documentación de la plataforma:
Herramientas de validación:
Corbado es la Passkey Intelligence Platform para equipos de CIAM que gestionan autenticación de consumidores a gran escala. Te ayudamos a ver lo que los logs de tu IDP y las herramientas de analytics genéricas no muestran: qué dispositivos, versiones de SO, navegadores y gestores de credenciales soportan passkeys, por qué los registros no se convierten en inicios de sesión, dónde falla el flujo de WebAuthn y cuándo una actualización de SO o navegador rompe el login en silencio — todo sin reemplazar Okta, Auth0, Ping, Cognito o tu IDP propio. Dos productos: Corbado Observe aporta observabilidad para passkeys y cualquier otro método de login. Corbado Connect añade passkeys gestionados con analytics integrado (junto a tu IDP). VicRoads ejecuta passkeys para más de 5M de usuarios con Corbado (+80 % de activación de passkey). Habla con un experto en Passkeys →
La elección depende de su arquitectura de autenticación. Si su aplicación utiliza OAuth2 u OIDC, System WebView (ASWebAuthenticationSession en iOS o Chrome Custom Tabs en Android) requiere el menor esfuerzo de implementación y ninguna configuración de archivos de asociación. Para aplicaciones nuevas que priorizan lo nativo, la implementación nativa proporciona una experiencia de usuario (UX) superior, mientras que Embedded WebView es adecuada para aplicaciones que ya integran la autenticación en un marco de WebView y necesitan control de sesión o cookies después del inicio de sesión.
SFSafariViewController aprovecha el motor de Safari, muestra la barra de URL con indicadores SSL y proporciona protección contra el phishing, lo que lo hace más confiable para los flujos de autenticación. WKWebView ofrece más personalización de la interfaz de usuario pero tiene un almacén de cookies aislado separado de Safari, requiere los derechos de Associated Domains y un archivo AASA para habilitar las claves de acceso, y no muestra la barra de URL, lo que reduce las señales de confianza para el usuario.
Las Chrome Custom Tabs comparten las cookies y las credenciales almacenadas con el navegador Chrome del usuario, lo que significa que las claves de acceso guardadas en el Gestor de Contraseñas de Google son accesibles durante la autenticación. El Android WebView estándar tiene un almacén de cookies aislado, no muestra la URL o los indicadores SSL, y Google lo ha prohibido explícitamente para el inicio de sesión en cuentas de Google debido a los riesgos de phishing.
Si un usuario tiene un gestor de credenciales de terceros como 1Password establecido como su proveedor activo, a menudo interceptará la creación y el almacenamiento de claves de acceso, teniendo prioridad sobre el gestor de credenciales nativo de la plataforma (iCloud Keychain o Gestor de Contraseñas de Google). Esto significa que las claves de acceso pueden almacenarse en la aplicación de terceros en lugar de en el llavero de la plataforma, lo que afecta al comportamiento de la sincronización entre dispositivos y a la gestión de las claves de acceso.
Cuando las políticas MDM inhabilitan la sincronización de credenciales, las claves de acceso se quedan vinculadas al dispositivo y no se pueden transferir a un dispositivo de sustitución, a diferencia de los escenarios típicos de los consumidores. Las aplicaciones dirigidas a entornos corporativos deben planificar mecanismos de autenticación alternativos como el inicio de sesión con contraseña o enlace mágico para gestionar los casos en los que un usuario reciba un nuevo dispositivo gestionado.
Mira cómo Corbado encaja con tu despliegue de passkeys y tu stack de autenticación actual.
Explorar la Console
Artículos relacionados
Tabla de contenidos