Как хранить токены Android? Нужен способ, которым можно нормально хранить токены в приложении.
Есть приложение клиент, которое принимает логин-пароль и отправляет его на сервер.
Сервер сверяет данные и выдаёт приложению токен.
Однако, токен надо как-то хранить, чтобы потом по нему инициализировать пользователя.
Вопрос, как это сделать? Shared Preferences? Безопасно ли?
Нужно просто куда-то засунуть уже готовый токен и потом его достать при необходимости.
Если можно, небольшой пример, спасибо.

21 Авг 2019 в 06:30
232 +1
0
Ответы
1

Для хранения токенов в Android приложении наиболее безопасным способом является использование Android KeyStore. Он позволяет хранить данные в зашифрованном виде, что делает их недоступными для посторонних приложений или пользователей.

Пример использования Android KeyStore для хранения токенов:

Создайте класс для управления ключами и шифрования данных:import android.content.Context;
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.KeyProperties;
import java.security.KeyStore;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class TokenManager {
private static final String KEY_ALIAS = "TokenAlias";
public static void saveToken(Context context, String token) {
try {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
if (!keyStore.containsAlias(KEY_ALIAS)) {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
keyGenerator.init(new KeyGenParameterSpec.Builder(KEY_ALIAS, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.setRandomizedEncryptionRequired(false)
.build());
keyGenerator.generateKey();
}
Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
cipher.init(Cipher.ENCRYPT_MODE, keyStore.getKey(KEY_ALIAS, null));
byte[] encryptedToken = cipher.doFinal(token.getBytes());
// Сохраняем зашифрованный токен в SharedPreferences или другое место
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getToken(Context context) {
try {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
cipher.init(Cipher.DECRYPT_MODE, keyStore.getKey(KEY_ALIAS, null));
// Получаем зашифрованный токен из SharedPreferences или другого места
byte[] encryptedToken = ...;
byte[] decryptedToken = cipher.doFinal(encryptedToken);
return new String(decryptedToken);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}Используйте методы saveToken() и getToken() для сохранения и получения токена в вашем приложении:// Сохранение токена
String token = "your_token_here";
TokenManager.saveToken(getApplicationContext(), token);
// Получение токена
String savedToken = TokenManager.getToken(getApplicationContext());

Таким образом, токен будет храниться в Android KeyStore в зашифрованном виде, обеспечивая безопасность данных.

20 Апр в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 722 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир