Разрешить Ejabberd и CakePHP 3 использовать одни и те же таблицы пользователей и пароли

Я занимаюсь разработкой веб-приложения, которое использует cakePHP 3.
У меня работает приложение, и мне нужно добавить чат ejabberd 15.x в мое приложение.

Я настроил jabber для использования odbc mysql и таблицы базы данных пользователей (та же таблица пользователей, которую использует cakephp).

Теперь проблема в том, что мое веб-приложение может нормально входить / регистрировать пользователей, используя хеш-пароль bcrypt для cakephp. Однако, поскольку пароли хешируются, ejabberd не может войти в систему этих пользователей, поскольку использует пароли в виде простого текста.

Я мог бы отключить хеширование паролей в cakephp и заставить его работать таким образом, но я бы предпочел дополнительную безопасность, которую обеспечивает хеширование, и включил точно такое же хеширование bcrypt на стороне ejabberd, чтобы он мог входить в систему с использованием хэшей, которые генерировал cakephp.

Есть ли способ сделать хеш-пароли ejabberd и cakephp3 абсолютно одинаковыми?

0

Решение

Создание расширения класса AbstractPasswordHasher должен сделать свое дело. Следуйте шаблону (ам), используемому для FallbackPasswordHasher,

http://api.cakephp.org/3.0/class-Cake.Auth.AbstractPasswordHasher.html

Затем настройте вашу систему на использование нового класса:

http://book.cakephp.org/3.0/en/controllers/components/authentication.html#changing-hashing-algorithms

(цитируется ниже, в качестве примера)

Изменение алгоритмов хеширования

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']
]
]
]
]
]);
}

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]