Saltar al contenido

¿Cómo almacenar de forma segura el token de acceso y el secreto en Android?

Solución:

Guárdelos como preferencias compartidas. Esos son privados de forma predeterminada y otras aplicaciones no pueden acceder a ellos. En dispositivos rooteados, si el usuario permite explícitamente el acceso a alguna aplicación que intenta leerlos, la aplicación podría usarlos, pero usted no puede protegerse contra eso. En cuanto al cifrado, debe solicitar al usuario que ingrese la frase de contraseña de descifrado cada vez (anulando así el propósito de almacenar en caché las credenciales) o guardar la clave en un archivo y obtendrá el mismo problema.

Hay algunos beneficios de almacenar tokens en lugar de la contraseña del nombre de usuario real:

  • Las aplicaciones de terceros no necesitan saber la contraseña y el usuario puede estar seguro de que solo la envía al sitio original (Facebook, Twitter, Gmail, etc.)
  • Incluso si alguien roba un token, no puede ver la contraseña (que el usuario también podría estar usando en otros sitios)
  • Los tokens generalmente tienen una vida útil y caducan después de cierto tiempo.
  • Los tokens se pueden revocar si sospecha que se han visto comprometidos

Puede almacenarlos en AccountManager. Según estos muchachos, se considera la mejor práctica.

ingrese la descripción de la imagen aquí

Aquí está la definición oficial:

Esta clase proporciona acceso a un registro centralizado de las cuentas en línea del usuario. El usuario ingresa las credenciales (nombre de usuario y contraseña) una vez por cuenta, lo que otorga a las aplicaciones acceso a los recursos en línea con la aprobación de “un clic”.

Para obtener una guía detallada sobre cómo utilizar AccountManager:

  • Tutorial de Udi Cohen
  • Blog de pilanitas
  • Presentación de Google IO

Sin embargo, al final, AccountManager solo almacena su token como texto sin formato. Por lo tanto, le sugiero que cifre su secreto antes de almacenarlo en AccountManager. Puede utilizar varias bibliotecas de cifrado como AESCrypt o AESCrypto

Otra opción es utilizar la biblioteca Conceal. Es lo suficientemente seguro para Facebook y mucho más fácil de usar que AccountManager. Aquí hay un fragmento de código para guardar un archivo secreto usando Conceal.

byte[] cipherText = crypto.encrypt(plainText);
byte[] plainText = crypto.decrypt(cipherText);

SharedPreferences no es una ubicación segura en sí misma. En un dispositivo rooteado podemos leer y modificar fácilmente los xml de SharedPrefereces de todas las aplicaciones. Por lo tanto, los tokens deben caducar con relativa frecuencia. Pero incluso si un token caduca cada hora, los tokens más nuevos aún se pueden robar de SharedPreferences. Android KeyStore debe usarse para el almacenamiento a largo plazo y la recuperación de claves criptográficas que se utilizarán para cifrar nuestros tokens con el fin de almacenarlos, por ejemplo, en SharedPreferences o en una base de datos. Las claves no se almacenan dentro del proceso de una aplicación, por lo que es más difícil comprometerlas.

Por lo tanto, más relevante que un lugar es cómo pueden ser seguros en sí mismos, por ejemplo, utilizando JWT de corta duración firmados criptográficamente, cifrándolos con Android KeyStore y enviándolos con un protocolo seguro.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *