Я пытаюсь создать приложение (в c # WPF), которое должно общаться с RESTApi.
Я хочу создать RESTApi самостоятельно.
Поэтому в данный момент я пытаюсь выяснить, как лучше всего разрешить пользователю моего приложения c # войти в RESTApi, чтобы он мог получать данные из базы данных.
Моей первой мыслью была базовая аутентификация. После некоторых исследований я понял, что я действительно не хочу передавать пароль в виде открытого текста (даже если я использую SSL).
Я знаю о важности солей, и я знаю, что наилучшим способом было бы использовать методы Hash, которые уже предоставляют случайные соли.
Но в моем конкретном случае я думал о сохранении хеша в моей базе данных с определенной солью, используя алгоритм Blowfish.
Далее я бы реализовать логику, которая будет предоставлять комбинацию соли, как
комбинация имени пользователя, немного перца, соли и фактического хешированного пароля. Может быть, даже последовательность, которую я мог бы встроить в эту логику. Что было бы трудно реализовать, если я хочу использовать Приложение на разных компьютерах, потому что я должен запомнить последнюю последовательность.
В любом случае, и RESTApi, и мое WPF-приложение будут знать эту логику для создания хэша, который будет отличаться каждый раз, когда я вызываю логику (из-за последовательности).
Таким образом, я мог соответствовать результату каждый раз, когда я использую логику.
В основном я провел некоторое исследование алгоритмов хеширования. Я нашел BCrypt для C # и PHP. Я уже достиг создания Hashs пароля, который пользователь будет вводить в моем приложении WPF. С другой стороны, я использовал crypt () на своем сайте, чтобы создать хэш blowfish. Оба соответствуют друг другу (используя одну и ту же соль).
Мои мысли были такими: Как я могу передать хешированный пароль в мой RESTApi без сохранения / передачи паролей в открытом тексте.
Итак, мой основной вопрос:
Есть ли лучший способ? Я на правильном пути, чтобы создать наполовину безопасную «логику». Или достаточно использовать Baisc / Digest Authentication, если я использую SSL?
Я знаю, что добиться безопасности очень сложно, но я действительно хочу узнать, как я могу реализовать такие вещи.
Задача ещё не решена.
Других решений пока нет …