Web API BasicHttpAuth с хешированным паролем

61
4

Поэтому у меня есть веб-Api, который аутентифицирует пользователей по имени пользователя и паролю. Клиенты, разговаривающие с API, будут иметь телефоны Android, у которых есть внутреннее приложение, чтобы получать/отправлять некоторые данные из api.

У меня есть хэшированные пароли в базе данных с солью. Соединение между клиентом и API будет SSL.

Теперь на веб-сайте (MVC) я регистрирую пользователей, создавая новый хэш и сопоставляя его с хешем в базе данных.

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

Теперь вопрос заключается в том, что было бы лучшей практикой при сравнении хешированного пароля. Я не думаю, что его сохранить просто отправить простой пароль API или не так ли?

спросил(а) 2021-01-19T16:39:12+03:00 2 месяца, 3 недели назад
1
Решение
62

Это безопасно, потому что вы используете SSL.

Обычная проверка подлинности неприемлема для текстовых запросов, но поскольку HTTPS шифрует все, это не должно быть проблемой.

Хранение пароля - это совершенно отдельная проблема, как вы уже отмечали, и которая также должна быть зашифрована, что звучит так, как будто у вас будет Android для вас. Единственное соображение заключается в том, что вам придется сделать обратимое шифрование, чтобы иметь возможность отправлять сам пароль в ваш API.

В основном:

(клиентская сторона) Пользователь вводит кредиты (на стороне клиента) Шифровать кредиты, сохранять в конфигурации (на стороне клиента) Чтение из config, расшифровка creds (на стороне клиента) Файл HTTPS-запрос к API с базовым типом проверки подлинности с использованием расшифрованных имен (на стороне сервера) Хэш (односторонний шифрование, в основном) пароль, сравнение с базой данных

Это похоже на то, что у вас есть, и я не вижу проблем с этим.

Все сказанное, просто за то, что это стоит, у меня возникнет соблазн внедрить сервер OAuth 2.0 для этого конкретного случая использования, так что вам не нужно думать о том, чтобы сохранить пароль вообще. Это довольно большое начинание (вроде - это не занимает слишком много времени с этими инструкциями), и вы должны оценивать его в каждом конкретном случае. Но в любое время, когда я должен беспокоиться об аутентификации API, я обычно общаюсь с этим или желаю, чтобы у меня было.

ответил(а) 2021-01-19T16:39:12+03:00 2 месяца, 3 недели назад
62

Я хотел бы использовать что-то вроде JWT (JSON Web Token, http://jwt.io). У вас может быть аутентификация клиента против вашего API, и если они предоставляют правильные учетные данные, вы можете выдать им токен, который они могут сохранять на локальном хранилище. Затем они будут предоставлять этот токен в заголовке любых запросов API, требующих аутентификации. Вы можете использовать промежуточное ПО OWIN для перехвата запросов, проверки/проверки токена и передачи запросов на контроллеры, если вы считаете, что токен действителен.

ответил(а) 2021-01-19T16:39:12+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема