Как правильно сохранить jwt в приложении для Android?

#android #android-studio #jwt #access-token

#Android #android-студия #jwt #токен доступа #android-studio

Вопрос:

У меня есть приложение для Android, в котором пользователю необходимо отправлять запросы с использованием веб-токена JSON (токены доступа / обновления). Где мне нужно правильно хранить его (или лучшие практики) с точки зрения как безопасности, так и простоты доступа к нему. Я слышал о SharedPreferences и AccountManager, но мнения разнятся от источника к источнику.

Комментарии:

1. Я думаю, что SQLLite.

Ответ №1:

У меня есть пример кода Android, который шифрует токены перед сохранением в общих префиксах, поскольку по умолчанию это небезопасное хранилище. Также это позволяет избежать вопросов о хранении токенов конечных пользователей, которые они не поймут.

Вы можете легко загрузить и запустить мое приложение, и вы заметите, что при перезапуске приложения нет запросов на вход:

При первом запуске приложения оно использует хранилище ключей Android для генерации ключа для приложения, который знает только ваше приложение:

Мое решение основано на Okta Android SDK, так что это тоже хорошее место для поиска.

Ответ №2:

Общие настройки были бы лучшим вариантом для хранения токенов. Это хранилище зависит от конкретного приложения, и другие приложения не могут получить доступ к этому пространству. Что касается шифрования, вы должны либо требовать, чтобы пользователь каждый раз вводил кодовую фразу для дешифрования (тем самым сводя на нет цель кэширования учетных данных), либо сохранять ключ в файл, и ваша проблема остается прежней. Я прилагаю детали для использования SharedPrefs ниже —

Как инициализировать?

 // 0 - for private mode`
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 

Editor editor = pref.edit();
  

Как хранить данные в общих настройках?

 editor.putString("key_name", "string value"); // Storing string
  

или

 editor.putInt("key_name", "int value"); //Storing integer
  

И не забудьте применить :

 editor.apply();
  

Как извлечь данные из общих настроек?

 pref.getString("key_name", null); // getting String

pref.getInt("key_name", 0); // getting Integer
  

Надеюсь, это поможет вам 🙂

Комментарии:

1. Для создания приложений используйте хранилище данных android-developers.googleblog.com/2020/09 /…