2016-03-31 2 views
4

У меня есть приложение для Android, которое взаимодействует с защитой WebAPI через OAuth. Для получения токена доступа мне нужно отправить учетные данные OAuth (то есть идентификатор клиента и секрет клиента) в заголовке запроса. Мой вопрос: где я должен хранить эти 2 значения (идентификатор клиента и секрет клиента), чтобы приложение могло использовать его, когда это необходимо. В настоящее время я просто закодировал его в вызове. Можно ли хранить их в файле strings.xml?Где хранить учетные данные клиента OAuth на Android

+0

Но мне нужно для отправки приложения с идентификатором клиента и секретностью. Поэтому я должен все же записать его в SharedPreference в коде. Это правильно или я неправильно понял? –

+0

Как вы это решили? У меня также есть client_id и client_secret, предоставленные мне для первого сетевого вызова, и я не могу просто «хранить» их в «SharedPreferences» – jlively

ответ

2

Просьба предоставить пользователю общие привилегии для хранения защищенных данных, потому что, если какой-либо другой инженер обратного проектирования получит жестко закодированные строки.shared pref - это безопасное место, где вы можете хранить данные.

+1

Я получил это. Но мой вопрос: как я должен поместить идентификатор клиента и секрет в sharedpreference, не записывая его в код ?. Когда пользователь загружает и устанавливает мое приложение, он/она собирается сделать сетевой звонок. Для этого сетевого вызова на работу требуются учетные данные oauth. Поэтому это означает, что мне нужно упаковать учетные данные в приложении. Как мне это сделать? –

+0

@AbhinavNair Зашифруйте ваши учетные данные и поместите зашифрованный текст в свой код, проверьте, запускается ли приложение в первый раз, чем расшифровывает этот текст и сохраняет в общей привилегии и использует этот префикс для дальнейшего использования. потому что каждый раз расшифровать не является хорошим решением. –

+0

если вы не возражаете, можете ли вы любезно дать мне ссылки на ссылки для шифрования и расшифровки строк на Andriod? –

1

Если вы обеспокоены безопасностью, вы можете сохранить данные в SharedPreference, зашифровав и сохранив ключи шифрования в Android Keystore.

Keystore не используется непосредственно для хранения таких секретов приложений, как пароль, однако он обеспечивает безопасный контейнер, который может использоваться приложениями для хранения своих закрытых ключей, что довольно сложно для вредоносных (неавторизованных) пользователей и приложения для извлечения.

Вот хороший учебник для создания хранилищ ключей. http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/

+0

Я получил это. Но мой вопрос: как я должен поместить идентификатор клиента и секрет в sharedpreference, не записывая его в код ?. Когда пользователь загружает и устанавливает мое приложение, он/она собирается сделать сетевой звонок. Для этого сетевого вызова на работу требуются учетные данные oauth. Поэтому это означает, что мне нужно упаковать учетные данные в приложении. Как мне это сделать? –

+0

Разве вам не сложно связывать всю архитектуру, если вы сначала сохраняете oauth в приложении? Клиент android должен сделать исходный веб-сайт на сервере, чтобы получить учетные данные oaut. Если вы беспокоитесь о безопасности этого вызова, используйте механизм pushnotification.зарегистрируйтесь для pushnotitfication и попросите сервер отправить oauth в gcm tickle. GCM щеки безопасны, поскольку они имеют проверку подписи приложений. – crashOveride

-2

Нет, это не безопасно хранить в строках.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"); 
+0

Но мне нужно отправить приложение с идентификатором клиента и секретом. Поэтому я должен все же записать его в SharedPreference в коде. Это правильно или я неправильно понял? –

+0

Вы должны избегать их хранения (особенно ваш секрет) в xml-файлах, поскольку их можно декомпилировать с помощью резервных инструментов, таких как «apktool». Думаю, держать их в SharedPreferences является более безопасным методом. –

+1

Я получил это. Но мой вопрос: как я должен поместить идентификатор клиента и секрет в sharedpreference, не записывая его в код ?. Когда пользователь загружает и устанавливает мое приложение, он/она собирается сделать сетевой звонок. Для этого сетевого вызова на работу требуются учетные данные oauth. Поэтому это означает, что мне нужно упаковать учетные данные в приложении. Как мне это сделать? –

Смежные вопросы