Хранить секретный ключ в Xamarin Forms

Я пытаюсь понять, как я могу хранить секреты в проекте форм xamarin.

У меня есть ядро ​​​​веб-API в качестве бэкэнда и приложение форм xamarin в качестве внешнего интерфейса.

Я пытаюсь закодировать аутентификацию facebook с помощью Xamarin.Auth, и мне нужно передать секретный ключ моему приложению.

Мое мышление:

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

2: Хранить в бэкэнде: я мог бы хранить ключи в бэкэнде, но, перехватив отправленные запросы, хакер мог получить мои секретные ключи.

Тогда каково решение? Как мне это сделать?

Спасибо,


person dalton5    schedule 26.06.2019    source источник
comment
Хранить в бэкенде — лучший вариант. Защитите серверную часть с помощью политик SSL, HSTS и других политик безопасности для защиты полезной нагрузки в сети. Это все, что мы можем сделать.   -  person Nirmal Subedi    schedule 26.06.2019
comment
Природа веб-сервисов или вашего приложения предназначена для использования другими людьми! Дверь всегда открыта, иначе как другие люди смогут использовать ваше приложение?   -  person Nirmal Subedi    schedule 26.06.2019


Ответы (1)


Вы можете сохранить свой секрет, используя Xamarin.Essentials. Для Android ваш секрет будет храниться в Androids KeyStore и в Связка ключей в случае iOS. Даже если вы решите использовать зашифрованный файл конфигурации, я настоятельно рекомендую хранить ваши ключи и IV в SecureStorage, а не жестко кодировать их в исходном коде. Он чрезвычайно прост в использовании и настолько безопасен, насколько это возможно на мобильном устройстве.

try
{
   // write secret
   await SecureStorage.SetAsync("oauth_token", "secret-oauth-token-value"); 

   // read secret
   var token = await SecureStorage.GetAsync("oauth_token");
}
catch(Exception ex)
{
} 
person Mouse On Mars    schedule 26.06.2019
comment
Проблема с этим подходом заключается в том, что вам все еще нужно использовать SetAsync, поэтому для токена oauth вы не собираетесь спрашивать об этом у пользователя, так как вы его вставляете? Если вы сделаете, как указано выше, он все еще существует в вашем исходном коде. - person Richthofen; 30.12.2019
comment
@Richthofen, возможно, здесь имеет смысл использовать переменную среды. - person Anton Swanevelder; 20.03.2020
comment
@Richthofen You App направляет пользователя на веб-сайт аутентификации, связанную службу аутентификации, которую использует ваше приложение, например. Auth0, Firebase, предоставляет токен аутентификации. Этот токен вы бы сохранили через SecureStorage на диск - person Mouse On Mars; 20.03.2020
comment
@AntonSwanevelder Я бы порекомендовал использовать безопасное хранилище, предлагаемое iOS и Android. Обычно, когда вы придумываете индивидуальное решение, результат менее безопасен, чем то, что предлагает платформа. - person Mouse On Mars; 20.03.2020