Я создаю приложение для Android, и я не могу (?) Найти любую информацию об аутентификации пользователя приложения в Google App Engine (без использования учетной записи Google пользователя). хорошая практика для хранения имени пользователя и пароля на устройстве Android, а затем хранения данных, используемых приложением в Google App Engine?Лучшее место для хранения учетных данных пользователя в Android
ответ
Вы не должны использовать SharedPreferences
, несмотря на как безопасный Google покажет вам, что они, по той простой причине, что укоренение привычки широко распространены обе мощности и подражатель мощности пользователей.
В корневых систем, уполномоченные приложения будут иметь доступ к внутренней системы хранения/системы раздела, таким образом, доступ к корневому собственности файлы зашифрованного XML, где Android хранит SharedPreferences, КОТОРАЯ СТАНЕТ ClearText ДЛЯ ROOT-УПОЛНОМОЧЕННЫЙ APPS. Поэтому, если у компрометированного телефона есть приложение, в котором хранятся такие данные, и у пользователя есть привычка злоупотреблять одним и тем же адресом электронной почты/паролем для разных служб, вектор атаки довольно прост, чтобы скомпрометировать учетные данные для нескольких служб, несмотря на любые предупреждения, которые пользователь уволил, когда укореняя его телефон или предоставляя приложению такие разрешения, потому что, ну, те предупреждения просто недостаточно ясны.
Альтернативы - это ручное шифрование постоянного хранилища для учетных данных с использованием пользовательских, переменных семян, соленых алгоритмов. secure-preferences lib - отличная альтернатива, которая в значительной степени делает все для вас прозрачным способом, с дополнительным преимуществом реализации интерфейса SharedPreferences от Android, сохраняя большинство функциональных возможностей spref по умолчанию с незначительной настройкой (посмотрите на их образцы).
2016 Edit: Я просто чувствовал, что мне нужно, чтобы вернуться к этому вопросу в 2016 году и добавить хорошую ссылку на компаниях Apple против ФБР драмы изменить ОСА в телефоне Сан-Бернардино нападавшего. Итак, представьте, что у вас есть телефон, который легко поддается управлению, как и большинство Android, и это может быть даже связано с корнем по умолчанию или не требует очистки данных от root. ФБР не требует ничего от Google или вашей компании, если они не получат ваши учетные данные. Используя такие вещи, как secure-preferences, вы принимаете на себя тот же тип ответственности. Apple решила предпринять, только сделав вашу собственную систему (в данном случае, ваше приложение) доступной для этих учетных данных. Вы действительно раздражаетесь ФБР, если они этого желают, но давая вашим пользователям ощущение, что вы, а не основная ОС, являетесь единственным органом, имеющим прямой контроль над этими учетными данными, - это то, что я предпочел бы иметь в своем продукте.
Рассмотрим SharedPreferences для этого, как ...
public class PrefUtils {
public static final String PREFS_LOGIN_USERNAME_KEY = "__USERNAME__" ;
public static final String PREFS_LOGIN_PASSWORD_KEY = "__PASSWORD__" ;
/**
* Called to save supplied value in shared preferences against given key.
* @param context Context of caller activity
* @param key Key of value to save against
* @param value Value to save
*/
public static void saveToPrefs(Context context, String key, String value) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString(key,value);
editor.commit();
}
/**
* Called to retrieve required value from shared preferences, identified by given key.
* Default value will be returned of no value found or error occurred.
* @param context Context of caller activity
* @param key Key to find value against
* @param defaultValue Value to return if no data found against given key
* @return Return the value found against given key, default if not found or any error occurs
*/
public static String getFromPrefs(Context context, String key, String defaultValue) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
try {
return sharedPrefs.getString(key, defaultValue);
} catch (Exception e) {
e.printStackTrace();
return defaultValue;
}
}
}
Просто использовать эти методы, как,
// Saving user credentials on successful login case
PrefUtils.saveToPrefs(YourActivity.this, PREFS_LOGIN_USERNAME_KEY, username);
PrefUtils.saveToPrefs(YourActivity.this, PREFS_LOGIN_PASSWORD_KEY, password);
// To retrieve values back
String loggedInUserName = PrefUtils.getFromPrefs(YourActivity.this, PREFS_LOGIN_USERNAME_KEY);
String loggedInUserPassword = PrefUtils.getFromPrefs(YourActivity.this, PREFS_LOGIN_PASSWORD_KEY);
Я думаю, что его гораздо яснее ... :)
Извините, но что я должен делать с этим? могли бы вы объяснить? –
Да, теперь это намного яснее. –
Итак, где я снова использую эти методы? –
Вы можете сохраните учетные данные пользователя в общих предпочтениях. Вы можете использовать это значение предпочтения при любом из ваших действий. Сохраненное значение останется даже после выхода из приложения. Пример кода для общих настроек приведен здесь. Рекомендуется сохранить ваш код предпочтений в вашем классе utils приложений, чтобы ваш код был организован.
public static String KEY = "SESSION";
public static void saveUserName(String userid, Context context) {
Editor editor = context
.getSharedPreferences(KEY, Activity.MODE_PRIVATE).edit();
editor.putString("username", userid);
editor.commit();
}
public static String getUserName(Context context) {
SharedPreferences savedSession = context.getSharedPreferences(KEY,
Activity.MODE_PRIVATE);
return savedSession.getString("username", "");
}
@FranklySpeaking: Я рассказываю вам, как можно хранить данные локально в предпочтении. Вы также можете сохранить свои учетные данные в Google App Engine из предпочтений. Проверьте это https://developers.google.com/appengine/docs/ –
- 1. Лучшее место для хранения данных приложения
- 2. Лучшее место для хранения данных Google Maps
- 3. Лучшее место для хранения больших XML-данных
- 4. Где лучшее место для хранения UserId на UserAuth в ServiceStack
- 5. Лучшее место для хранения массива в Laravel
- 6. Лучшее место для хранения пробных данных для веб-приложения
- 7. Титан: Лучшее место для хранения секретных файлов
- 8. Лучшее место для хранения учетных данных Помимо базы данных или реестра
- 9. Лучшее место для хранения содержимого приложения
- 10. Лучшее место для хранения альтернативных имен?
- 11. Место хранения данных пользователя Drupal
- 12. Какое лучшее «место» для хранения структурированных данных только для чтения?
- 13. Лучшее место для хранения фоновых изображений
- 14. Где лучшее место для хранения общепринятой переменной?
- 15. Лучшее место для хранения переменных окружения
- 16. Лучшее место для хранения пользовательских функций?
- 17. Лучшее место для хранения временной строки?
- 18. Android - где это лучшее место для хранения списка изображений локально?
- 19. Лучший способ хранения учетных данных пользователя
- 20. Лучшее место для хранения больших объемов данных сеанса
- 21. Лучшее место для хранения фотографий \ видео-аннотации данных
- 22. Лучшее место для хранения локальной базы данных с приложением?
- 23. Лучшее место для хранения токенов доступа для использования рельсов
- 24. Android и место для хранения данных?
- 25. Лучшее место для хранения параметров БД в IBM Integration Bus
- 26. лучшее решение для хранения данных для данных
- 27. Лучшее место для хранения файла для периода трейла
- 28. Где лучшее место для хранения зарегистрированных пользователей и информации
- 29. Лучшее место для размещения XSD
- 30. место хранения данных whatsapp в наборах android
Я бы сказал, что «SharedPreferences» - это хорошее место для начала. Шифрование их обязательно **, если приложение будет опубликовано **. –
Когда вы работаете с паролями, лучшее место для начала - это наименее подверженное ошибкам место, которое вы знаете. Android не предоставляет из коробки SharedPreferences шифрование, а также возможность их шифрования. Поэтому я говорю, что лучшее место для начала не может быть местом, которое по какой-то причине может оказаться в финальной версии. У меня была аналогичная проблема, и в итоге я использовал SecurePreferences https://github.com/scottyab/secure-preferences – leRobot
ОК, в моем случае я разрабатываю внутреннее корпоративное приложение, которое будет установлено в нескольких таблицах, которые у нас есть. , Поскольку у меня есть требование хранить учетные данные, я считаю более правильным начать с его базовой реализации. Шифрование их будет включено в дорожную карту для следующих версий. Никто здесь не возьмет устройства и не запустит их, чтобы увидеть другие пароли :-) –