Intereting Posts
Как получить текущее имя местоположения в виде строки, когда мы знаем широту и долготу Как iCloud отправляет уведомление в мое приложение при прослушивании NSPersistentStoreDidImportUbiquitousContentChangesNotification Создание iAd Pop Up над панелью инструментов Codename One – ошибка сборки iOS на этапе экспорта Как добавить ссылку в комментарий Xcode, чтобы открыть другой файл исходного кода? Приложение iOS с кодировкой base 64 + hMac Добавление результатов SKShapeNode.fillColor приводит к ошибке трафарета Почему Xcode автоматически выполняет точку останова при запуске приложения NSDateFormatter отсутствующие методы … мне не хватает импорта iOS – Как использовать NFC для распознавания тегов NFC? Как удалить предыдущий контент из ячейки Передача данных в определенный контроллер просмотра без ввода контроллера Swift Пул CMSampleBufferRef для записи потока H.264 AVCC Как проверить, был ли этот метод вызван? Не удалось определить текущую ориентацию устройства

Лучший способ сохранить учетные данные в устройстве

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

Поэтому мне нужно выбрать лучший способ безопасного сохранения этой информации. Я прочитал несколько статей, где совет был SharedPreferences и другие менеджеры аккаунтов.

Итак, можете ли вы указать, какой путь лучше всего подходит для этой ситуации?

Не используйте NSUserDefaults или SharedPreferences как предлагали другие, потому что они хранят информацию в виде обычного текста. Поскольку информация о пароле в считанных конфиденциальных данных, сначала зашифруйте его.

Для iOS используйте KeyChain. Эта оболочка помогает:

UICKeyChainStore

Для Android

Secure-предпочтения

* Примечание. Чтобы еще больше поддержать мои заявления, Apple, как известно, отклонила приложения, хранящие конфиденциальные данные в обычном тексте, поэтому используйте шифрование

На Android SharedPreferences – хороший способ сделать это, это довольно просто. Но дружеское напоминание … ЭТО НЕ БЕЗОПАСНЫЙ ПУТЬ, но это, наверное, самый простой. Пользователь может получить доступ к этому файлу, если устройство коренится, а данные хранятся в виде простого текста способом Key-Value .

Вы можете попытаться использовать какое-то шифрование для этих данных или попытаться найти оболочку для ее обработки, например SecurePreferences как это было предложено в других ответах. iOS должен иметь другие обертки или методы.

Вы также можете использовать решение AccountManager от Google. Это уже обсуждалось по этому вопросу здесь на SO.

Вы также можете попытаться изменить способ аутентификации пользователя на своем сервере, предложение будет использовать OAuth , как это делает Twitter.

Но, если вам нравится использовать SharedPreferences , об этом ниже.

Подробнее о SharedPreferences здесь . И вы можете получить доступ к документам здесь .

Пример:

 public class SessionManager { private static SessionManager instance = null; private SharedPreferences sharedPref; private Editor editor; private final String prefName = "session"; public static SessionManager getInstance() { if (instance == null) { instance = new SessionManager(); } return instance; } private SessionManager() { sharedPref = context_.getSharedPreferences(prefName,Context.MODE_PRIVATE); } public void saveUser(String username, String password, int sid) { if (TextUtils.isEmpty(username) && TextUtils.isEmpty(password) && sid > 0) { editor = sharedPref.edit(); editor.putInt("session_id",sid); editor.putString("username", username); editor.putString("password",password); editor.commit(); } } public String getUsername() { return sharedPref.getString("username",null); } // Declare other methods to fetch the rest of the data. } 

TL; DR: Лучше не хранить эти конфиденциальные данные в виде обычного текста. Но это, безусловно, самый простой способ.