Как безопасно хранить данные для аутентификации (OAuth 2.0)
У меня есть такой код для получения токена для microsoft graph и он работает, но я хочу сделать приложение безопасным. Насколько я понимаю, в сети вряд-ли можно будет получить доступ к каким-либо конфиденциальным данным по типу пароля или логина, если получать токен через post и по https. Но как быть с декомпиляцией, возможно ли получить доступ к ClientSecret,ClientId и TenantId через неё? И если можно, то какие есть инструменты для того чтобы этого избежать. С паролем и логином думаю тут всё еще безопасно, поскольку они не константы и их вводит пользователь.
final tenantId = "MY_TENANT_ID";
final clientId = "MY_CLIENT_ID";
final clientSecret = "CLIENT_SECRET";
final userNameFromTextField = "USERNAME";
final passwordFromTextField = "PASSWORD";
final body = {
"grant_type": "password",
"client_id": clientId,
"client_secret": clientSecret,
"scope": "https://graph.microsoft.com/.default",
"userName": userNameFromTextField,
"password": passwordFromTextField,
};
final response = await http.post('https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token', body: body);
Ответы (1 шт):
Давайте представим:
- Мы вынесли важные для зашиты данные (clientId, clientSecret) на отдельный сервер.
- Получаем эти данные в зашифрованном виде через get запрос.
- Расшифровываем их.
- Делаем OAuth post запрос.
Мы повысили безопасность?
Нет, обычное приложения для сниффинга трафика предоставит все ваши ключи безопасности в полном объеме. Для этого приложения достаточно установить в систему сертификат (никакой рут и прочие ненужно), т.е. любой пользователь способен прослушать трафик и поймать нужную ему информацию.
Пока вы пытаетесь защитить приложение от 10% пользователей (которые способны провести декомпиляцию/обфуcкацию), вы даже не предоставляете что у вас есть "дыра в приложении" которой могут воспользоваться 100% пользователей.
Итак как нам защитить данные для OAuth?
Поднять сервер для обработки OAuth, отправляя в него только данные пользователя (логин и пароль), в ответ принимать от него токен авторизации. Таким способом вы рискуете только данными пользователями.