Я занимаюсь разработкой веб-приложения, которое использует cakePHP 3.
У меня работает приложение, и мне нужно добавить чат ejabberd 15.x в мое приложение.
Я настроил jabber для использования odbc mysql и таблицы базы данных пользователей (та же таблица пользователей, которую использует cakephp).
Теперь проблема в том, что мое веб-приложение может нормально входить / регистрировать пользователей, используя хеш-пароль bcrypt для cakephp. Однако, поскольку пароли хешируются, ejabberd не может войти в систему этих пользователей, поскольку использует пароли в виде простого текста.
Я мог бы отключить хеширование паролей в cakephp и заставить его работать таким образом, но я бы предпочел дополнительную безопасность, которую обеспечивает хеширование, и включил точно такое же хеширование bcrypt на стороне ejabberd, чтобы он мог входить в систему с использованием хэшей, которые генерировал cakephp.
Есть ли способ сделать хеш-пароли ejabberd и cakephp3 абсолютно одинаковыми?
Создание расширения класса AbstractPasswordHasher
должен сделать свое дело. Следуйте шаблону (ам), используемому для FallbackPasswordHasher
,
http://api.cakephp.org/3.0/class-Cake.Auth.AbstractPasswordHasher.html
Затем настройте вашу систему на использование нового класса:
(цитируется ниже, в качестве примера)
Изменение алгоритмов хеширования
CakePHP предоставляет чистый способ переноса паролей ваших пользователей из одного алгоритма в другой, это достигается с помощью класса FallbackPasswordHasher. Предполагая, что вы переносите свое приложение из CakePHP 2.x, который использует хэши паролей sha1, вы можете настроить AuthComponent следующим образом:
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'passwordHasher' => [
'className' => 'Fallback',
'hashers' => [
'Default',
'Weak' => ['hashType' => 'sha1']
]
]
]
]
]);
}
Первое имя, отображаемое в ключе хэширования, указывает, какой из классов является предпочтительным, но в случае неудачной проверки он откатится к остальным в списке.
Других решений пока нет …