Я хочу использовать хеши паролей из Discourse в файле htpassword для другого приложения.
Какой алгоритм хеширования паролей использует Discourse?
Я хочу использовать хеши паролей из Discourse в файле htpassword для другого приложения.
Какой алгоритм хеширования паролей использует Discourse?
Извините, если я неправильно понял, но вы имеете в виду, что хотите фактически скопировать алгоритм хеширования Discourse в своё приложение, чтобы сопоставлять хеши, генерируемые вашим приложением, с теми, что хранятся в Discourse? Разве это не потребовало бы от вас регулярной синхронизации паролей из Discourse в ваш файл htpasswd, учёта солей, которые могут быть или не быть в Discourse сейчас или в будущем, и постоянного поддержания вашей реализации алгоритма хеширования в синхронизации с алгоритмом Discourse навсегда?
Ещё раз извините, если я полностью неправильно понял, но мне пришлось уточнить это из собственного любопытства.
Просто для проверки, что имя пользователя и пароль действительны.
Пользователь предоставляет имя пользователя и пароль. Мы проверяем, что предоставленный пароль действителен согласно хешу из Discourse. Мы не будем генерировать никаких хешей.
Под «генерацией» я имел в виду не хранение, а проверку правильности пароля.
Интересно, есть ли в Discourse SSO в обратном направлении, чтобы пользователи могли входить в другие приложения напрямую через Discourse.
Да, Discourse может выступать в качестве авторитетного источника для входа, и это правильный путь, @csmu. Попытка дублировать метод хеширования приведёт к тому, что ваш метод входа будет ломаться при каждом изменении.
Кроме того, это не учтёт пользователей, у которых нет локального пароля.
Если вы не хотите или не можете прочитать исходный код, чтобы найти ответ на ваш вопрос, возможно, лучше сделать шаг назад и описать, какую проблему вы пытаетесь решить.
Я могу прочитать исходный код, как только найду его. Я искал в коде упоминание user.password и сосредоточился в основном на user_controller. Ничего бросилось в глаза. Буду благодарен за подсказки, куда именно смотреть.
Мне бы хотелось иметь возможность проверять пользователя и пароль через Discourse, не добавляя вход/регистрацию через SSO. Возможно, через API или прямой вызов некоторого Ruby-кода.
О, да. Рэйлз имеет смысл только после того, как вы знаете, где что находится. Вот это:
Но я всё же рекомендую сначала отступить и описать проблему, а не начинать сразу с вашего решения.
Спасибо, Джей —
После прочтения
def confirm_password?(password)
return false unless password_hash && salt
self.password_hash == hash_password(password, salt)
end
в файле user.rb
следующий код работает для прямой валидации на Ruby:
user = User.find_by_email('some.email.address')
user.confirm_password?'valid-password'
=> true
Я экспериментировал с файлом .htaccess для сервера и искал способ валидации имени пользователя и пароля через Discourse для этого сервера, не зная пароли для генерации файла .htaccess. Подход SSO лучше, но знание того, как валидировать имя пользователя и пароль без использования SSO, будет полезно для меня.
Здравствуйте,
Меня интересует, какая функция хеширования паролей и связанные с ней параметры (длина хеша, соль, название используемой библиотеки) применяются для локального входа. Просмотр упомянутого ранее ruby-файла не помог. Эта информация необходима мне для целей соответствия требованиям: передовые практики в области GDPR (а также в целом в сфере информационной безопасности) требуют документирования таких данных.
Редактирование: ответ найден здесь: Export password hashes in the PHC format → discourse/docs/SECURITY.md at main · discourse/discourse · GitHub