У меня есть приложение для Android, которое взаимодействует с защитой WebAPI через OAuth. Для получения токена доступа мне нужно отправить учетные данные OAuth (то есть идентификатор клиента и секрет клиента) в заголовке запроса. Мой вопрос: где я должен хранить эти 2 значения (идентификатор клиента и секрет клиента), чтобы приложение могло использовать его, когда это необходимо. В настоящее время я просто закодировал его в вызове. Можно ли хранить их в файле strings.xml?Где хранить учетные данные клиента OAuth на Android
ответ
Просьба предоставить пользователю общие привилегии для хранения защищенных данных, потому что, если какой-либо другой инженер обратного проектирования получит жестко закодированные строки.shared pref - это безопасное место, где вы можете хранить данные.
Я получил это. Но мой вопрос: как я должен поместить идентификатор клиента и секрет в sharedpreference, не записывая его в код ?. Когда пользователь загружает и устанавливает мое приложение, он/она собирается сделать сетевой звонок. Для этого сетевого вызова на работу требуются учетные данные oauth. Поэтому это означает, что мне нужно упаковать учетные данные в приложении. Как мне это сделать? –
@AbhinavNair Зашифруйте ваши учетные данные и поместите зашифрованный текст в свой код, проверьте, запускается ли приложение в первый раз, чем расшифровывает этот текст и сохраняет в общей привилегии и использует этот префикс для дальнейшего использования. потому что каждый раз расшифровать не является хорошим решением. –
если вы не возражаете, можете ли вы любезно дать мне ссылки на ссылки для шифрования и расшифровки строк на Andriod? –
Если вы обеспокоены безопасностью, вы можете сохранить данные в SharedPreference, зашифровав и сохранив ключи шифрования в Android Keystore.
Keystore не используется непосредственно для хранения таких секретов приложений, как пароль, однако он обеспечивает безопасный контейнер, который может использоваться приложениями для хранения своих закрытых ключей, что довольно сложно для вредоносных (неавторизованных) пользователей и приложения для извлечения.
Вот хороший учебник для создания хранилищ ключей. http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/
Я получил это. Но мой вопрос: как я должен поместить идентификатор клиента и секрет в sharedpreference, не записывая его в код ?. Когда пользователь загружает и устанавливает мое приложение, он/она собирается сделать сетевой звонок. Для этого сетевого вызова на работу требуются учетные данные oauth. Поэтому это означает, что мне нужно упаковать учетные данные в приложении. Как мне это сделать? –
Разве вам не сложно связывать всю архитектуру, если вы сначала сохраняете oauth в приложении? Клиент android должен сделать исходный веб-сайт на сервере, чтобы получить учетные данные oaut. Если вы беспокоитесь о безопасности этого вызова, используйте механизм pushnotification.зарегистрируйтесь для pushnotitfication и попросите сервер отправить oauth в gcm tickle. GCM щеки безопасны, поскольку они имеют проверку подписи приложений. – crashOveride
Нет, это не безопасно хранить в строках.xml. Вместо этого используйте SharedPreferences
. Например:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
, а затем хранить идентификатор клиента и секрет клиента, как это:
sharedPreferences.edit()
.putString("client_id", "your_client_id")
.putString("client_secret", "your_client_secret")
.apply();
Чтобы получить идентификатор клиента и секрет клиента обратно от SharedPreferences:
String clientId = preferences.getString("client_id", "No ID");
String clientSecret = preferences.getString("client_secret", "No Secret");
Но мне нужно отправить приложение с идентификатором клиента и секретом. Поэтому я должен все же записать его в SharedPreference в коде. Это правильно или я неправильно понял? –
Вы должны избегать их хранения (особенно ваш секрет) в xml-файлах, поскольку их можно декомпилировать с помощью резервных инструментов, таких как «apktool». Думаю, держать их в SharedPreferences является более безопасным методом. –
Я получил это. Но мой вопрос: как я должен поместить идентификатор клиента и секрет в sharedpreference, не записывая его в код ?. Когда пользователь загружает и устанавливает мое приложение, он/она собирается сделать сетевой звонок. Для этого сетевого вызова на работу требуются учетные данные oauth. Поэтому это означает, что мне нужно упаковать учетные данные в приложении. Как мне это сделать? –
- 1. Android Oauth, хранящий учетные данные клиента
- 2. Обновление Token - где хранить учетные данные?
- 3. Где хранить внешние учетные данные в JBoss?
- 4. Sails.js, где хранить учетные данные безопасности?
- 5. Где хранить учетные данные для devops?
- 6. Vaadin 7. Как хранить учетные данные на стороне клиента
- 7. Учетные данные Google Analytics на стороне клиента
- 8. Хранить учетные данные WIFI
- 9. Как хранить учетные данные OAuth с помощью ключа Gnome
- 10. Как хранить данные OAuth
- 11. Где хранить учетные данные на iPhone (имя пользователя или userId)?
- 12. Учетные данные клиента AFNetworking
- 13. Android, где хранить кешированные данные?
- 14. clojure oauth и учетные данные
- 15. Где хранить данные GPS на Android
- 16. Создание класса базы данных - Где хранить учетные данные?
- 17. Хранить учетные данные Twitter и Facebook API
- 18. Испытательная кухня, хранить учетные данные
- 19. Где хранить данные?
- 20. MySQL/Хранить учетные данные MySQL
- 21. где хранить учетные данные пользователя в корпоративном приложении (EAI)?
- 22. Учетные данные клиента из UserService на IdentityServer3
- 23. iPhone: где хранить учетные данные для имени пользователя и пароля?
- 24. Где хранить учетные данные пользователя в настольном приложении Python?
- 25. Где хранить учетные данные SQL Server для клиента Windows для доступа к SQL Server
- 26. Где хранить секретные ключи и учетные данные для веб-приложения?
- 27. Где хранить учетные данные Twitter в блестящем приложении?
- 28. Где я должен хранить учетные данные и как их вернуть?
- 29. Где хранить учетные данные базы данных в веб-приложении?
- 30. Где хранить учетные данные базы данных GAE/Google Cloud SQL?
Но мне нужно для отправки приложения с идентификатором клиента и секретностью. Поэтому я должен все же записать его в SharedPreference в коде. Это правильно или я неправильно понял? –
Как вы это решили? У меня также есть client_id и client_secret, предоставленные мне для первого сетевого вызова, и я не могу просто «хранить» их в «SharedPreferences» – jlively