Защита от порхания

#flutter #dart #https #jwt

#флаттер #дротик #https #jwt

Вопрос:

Я создаю приложение Flutter, которое использует API сервера Node Js. Для авторизации я решил использовать JWT с закрытыми / открытыми ключами. Связь между сервером и мобильным клиентом использует HTTPS. Приложение Flutter сохраняет токен в связке ключей (ios) или хранилище ключей (Android). Мой вопрос связан с необходимостью реализации дополнительных мер безопасности. Мне интересно, требуются ли следующие пункты:

  1. Проверка ответов сервера с помощью открытого ключа путем проверки токена для идентификации сервера
  2. Проверка клиентских запросов с помощью закрытого ключа на стороне сервера (клиент подписывает токен открытым ключом)

Действительно ли это необходимо для того, чтобы избежать атак man in the middle? Мое возражение связано с производительностью, связанной с подписью / проверкой токенов для каждого сообщения.

Спасибо

Ответ №1:

Я использовал наши мобильные приложения JWT для обеспечения безопасности, и эти приложения прошли тест безопасности (3. сторонняя компания). Компания заявляет: сохраняйте в секрете свой сохраненный токен или любые ключи.

И мы знаем, что просто безопасности JWT недостаточно. Мы написали пользовательский зашифрованный алгоритм, чтобы скрыть JWT (например, sha-1), поэтому мы зашифровываем JWT для этого.(вы должны написать код шифрования на стороне клиента и серверной части) Обычный jwt: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

После шифрования: xxs{4=-23dasdxe3 (пример)

Мы приняли правила безопасности с этим решением.

Комментарии:

1. Спасибо. Используете ли вы один и тот же алгоритм шифрования для каждого клиента? Разве не просто взломать / загрузить приложение на мобильное устройство и найти / понять алгоритм?

2. Хорошо, найдите алгоритм, но моя рабочая база алгоритма присутствует и всегда изменяет все запросы, поэтому, даже если он найден, мы сокращаем время истечения срока действия JWT.

3. Спасибо. В этом случае кажется, что вы отправляете JWT, когда пользователь входит в систему вместе с методом algorithm. Насколько я понимаю, вы храните JWT и метод algorithm на стороне сервера (базы данных), верно? Это разумно. Вы меняете алгоритм для каждого JWT или на основе временного способа? Какая сторона хэширует JWT, сервер или клиент?