Настройка MD5 авторизации на Openfire
Openfire (ранее известный как Wildfire Server и Jive Messenger) — это XMPP-сервер, написанный на Java и использующий двойное лицензирование под Apache License 2.0 и коммерческой лицензией. При установке, он по-умолчанию использует алгоритм хэширования паролей Blowfish. В свою очередь многие CMS-системы используют алгоритм MD5 для хэширования паролей пользователей. При интеграции Openfire и CMS возникает задача по хранению паролей Openfire в md5. Далее я расскажу, как решить эту задачу, а заодно поведаю об установке сервера Openfire.
Для тех, кто уже установил Openfire можно перейти сразу ко второй части статьи.
Установка
Устанавливать будем последнюю стабильную версию Openfire 3.6.4 на Ubuntu 10.10. Скачать её можно, как в виде deb-пакета, так и в виде бинарников. Будем ставить из пакетов.
1 2 |
wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_3.6.4_all.deb dpkg -i ./openfire_3.6.4_al.deb |
После этого Openfire запустится сам, но если этого не произошло (ps aux | grep openfire) то запускаем его сами:
1 |
service openfire start |
После этого заходим по адресу http://localhost:9090/ и проходим все шаги веб-инсталлятора. Самое главное указать, что будем использовать внешнюю базу (MySQL) и её реквизиты.
Настройка MD5 авторизации
Все свойства Openfire (ну кроме доступа к БД 🙂 ) хранятся в таблице ofProperty, а за тип авторизации отвечает поле provider.auth.className. Изначально оно выставлено в org.jivesoftware.openfire.auth.DefaultAuthProvider, а мы поменяем его на org.jivesoftware.openfire.auth.JDBCAuthProvider и импортируем его настройки.
Вот дамп таблицы ofProperty:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
INSERT INTO `ofProperty` (`name`, `propValue`) VALUES ('passwordKey', '<strong>fsdgdDFSFbd</strong>'), ('xmpp.socket.ssl.active', 'true'), ('xmpp.domain', 'im.local'), ('provider.admin.className', 'org.jivesoftware.openfire.admin.DefaultAdminProvider'), ('provider.lockout.className', 'org.jivesoftware.openfire.lockout.DefaultLockOutProvider'), ('provider.user.className', 'org.jivesoftware.openfire.user.DefaultUserProvider'), ('provider.auth.className', '<strong>org.jivesoftware.openfire.auth.JDBCAuthProvider</strong>'), ('xmpp.auth.anonymous', 'true'), ('provider.group.className', 'org.jivesoftware.openfire.group.DefaultGroupProvider'), ('provider.vcard.className', 'org.jivesoftware.openfire.vcard.DefaultVCardProvider'), ('provider.securityAudit.className', 'org.jivesoftware.openfire.security.DefaultSecurityAuditProvider'), ('xmpp.session.conflict-limit', '0'), ('update.lastCheck', '1289541394344'), ('jdbcProvider.driver', 'com.mysql.jdbc.Driver'), ('jdbcProvider.connectionString', 'jdbc:mysql://localhost/dbname?user=root&password=pass'), ('jdbcAuthProvider.connectionString', 'jdbc:mysql://localhost/dbname?user=root&password=pass'), ('jdbcAuthProvider.passwordSQL', 'SELECT encryptedPassword FROM ofUser WHERE username=?'), ('jdbcAuthProvider.passwordType', '<strong>md5</strong>'); |
Поле passwordKey используется как соль для формирования паролей. После этого перезапускаем Openfire (sudo service openfire restart) и меняем в базе пароль для юзера admin (т.к. он был сгенерирован со старой солью и по алгоритму Blowfish). Всё, юзеры коннектятся. Если у вас возникнут какие-либо глюки, помните, что у Openfire есть свой кэш, и данные там не всегда такие-же как и в базе. В админке можно очистить кэш, или сделать для этого перезапуск Openfire.