#flutter #dart #https #jwt
#флаттер #дротик #https #jwt
Вопрос:
Я создаю приложение Flutter, которое использует API сервера Node Js. Для авторизации я решил использовать JWT с закрытыми / открытыми ключами. Связь между сервером и мобильным клиентом использует HTTPS. Приложение Flutter сохраняет токен в связке ключей (ios) или хранилище ключей (Android). Мой вопрос связан с необходимостью реализации дополнительных мер безопасности. Мне интересно, требуются ли следующие пункты:
- Проверка ответов сервера с помощью открытого ключа путем проверки токена для идентификации сервера
- Проверка клиентских запросов с помощью закрытого ключа на стороне сервера (клиент подписывает токен открытым ключом)
Действительно ли это необходимо для того, чтобы избежать атак 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, сервер или клиент?