Sé que algunos de ustedes se identificarán. Entonces, lo siguiente que consideramos fue, ¿qué tal si simplemente lo tomamos e incrustamos dentro de nuestra interfaz de usuario utilizando un WebView? Para aquellos que no lo saben, un WebView es básicamente un widget de interfaz de usuario que ejecuta una versión en miniatura del navegador, por lo que podemos hacer que el código web se ejecute allí. El problema es que los WebViews se consideran inseguros y, de hecho, algunos de nuestros métodos de autenticación simplemente no se ejecutarán si se ejecutan dentro de un WebView.
Entonces nos quedamos con el navegador, pero afortunadamente para nosotros, podemos ejecutar el navegador en un modo incrustado, lo que se siente un poco mejor para el usuario. No parece que estés saliendo de la aplicación cuando realmente cambias al navegador. Parece que es parte de la aplicación, aunque técnicamente se está ejecutando en un proceso diferente.
Bien, genial. Entonces tenemos nuestras soluciones listas, así que supongo que todo lo que tenemos que hacer es lanzar nuestro navegador incrustado, Safari o Chrome, y ejecutar nuestro flujo, y luego obtener la devolución de llamada de alguna manera en nuestro código nativo o ejecutar algún JavaScript o hackearlo. Bueno, desafortunadamente, los procesos móviles están completamente aislados. Eso significa en términos simples que no puedes acceder realmente a los datos entre procesos, y eso es una buena noticia para nosotros, los usuarios del teléfono móvil, porque de lo contrario las cosas serían un desastre.
Entonces, ¿qué podemos hacer? Podemos iniciar el navegador, podemos lanzarlo, ¿verdad? Entonces, ¿cómo obtendríamos algo de vuelta en la capa nativa? Podemos utilizar deep links. Los deep links son una forma para que las aplicaciones móviles declaren que pueden manejar ciertas URL en lugar de abrirlas en el navegador. Piensa en la última vez que recibiste un mensaje de texto con un enlace de YouTube y cuando hiciste clic en él, se abrió la aplicación, ¿verdad? No el navegador. Es el mismo concepto aquí.
Bien, genial. Ahora tenemos una forma de volver a nuestro código nativo, pero no podemos simplemente enviar la sesión en la URL de redireccionamiento porque eso es completamente inseguro. Deberíamos tener algún tipo de protocolo de intercambio en su lugar, y ahí es donde entra Pixie. Pixie o PKCE es un protocolo interesante. Significa Proof-of-Key Code Exchange (Intercambio de Código de Prueba de Clave), y puedes implementarlo en cualquier momento que lo necesites. Está orientado hacia dispositivos móviles, pero no necesariamente. Voy a explicar los principios de Pixie en general para que lo entendamos, y luego te mostraré cómo lo usamos para ejecutar flujos en nuestras aplicaciones nativas. Entonces, Pixie funciona así. El cliente genera el código. Esto se considera una clave. Es solo una matriz aleatoria de bytes y se realiza un hash de esta clave. Este hash es donde todo comienza. Esto se considera el desafío. Este desafío se envía al servidor. La comunicación es base64. Pero no quiero centrarme en eso, porque es solo una capa de cifrado y no es interesante.
Comments