Martali 0 Опубликовано 17 апреля, 2022 Доброго времени суток. Не могу разобраться, как работает связь обвязки Ghtweb 5.1.3 (взята с Github'a) и ява-сборки jts 2018 года. Сам логин и игровой сервер запущены и работают. Развернул и настроил Ghtweb 5, отображает онлайн сервера, список игроков, топ ПВП/ПК. Проблема с созданием аккаунта на сайте. После успешной регистрации, учётные данные принимаются сайтом. Стоит зайти на логин сервер, даже до выбора сервера, в ЛК на сайт уже не попасть. Опытным путём и чтением результатов запроса в Гугл, причиной считаю разную генерацию хэшей БД сайта и логин сервера. При авторизации на сайте хэш имеет такой вид: faf200037c7b4290662d57f0ee59a450 (поле hash_auth), на логин сервере — fEqNCco3Yq9h5ZUglD3CZJT4lBs=(поле password). После авторизации на логин сервере значение поле password становится вида — sha1:1000:BKUtFOSowxjReuJ2InqAesCMSOOmUo3q:RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW и зайти в ЛК на сайте больше нельзя. В настройках логин-сервера на ghtweb стоит тип шифрования sha1, в конфиге логин сервера, так же стоит sha1. Менял настройки на whirpool и в ght и в логин сервере. Поведение не поменялось, только в указанных выше полях поначалу меняется вид строки хэша, но поле password в БД логин сервера всегда имеет вид sha1:1000:BKUtFOSowxjReuJ2InqAesCMSOOmUo3q:RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW после первой авторизации в нём(ЛС). Кто сталкивался с подобным, прошу подсказать, как исправить или куда копать? Прикрепляю фрагменты Lineage.php и LoginForm.php с каталога ghtweb'a, так как там в коде встречается passwordEncrypt PHP: # /** * Шифровка пароля * * @param $password * * @return string */ public function passwordEncrypt($password) { if ($this->config('password_type') == Ls::PASSWORD_TYPE_WHIRLPOOL) { return base64_encode(hash('whirlpool', $password, true)); } return base64_encode(pack('H*', sha1(utf8_encode($password)))); } PHP: // Аккаунт на сервере найден if ($account) { if ($account['password'] == $l2->passwordEncrypt($this->getPassword())) { // Аккаунта на сайте нет, создаю его так как на сервере он уже есть if (!$siteAccount) { $email = null; $columnNames = $l2->getDb() ->getSchema() ->getTable('accounts') ->getColumnNames(); if (is_array($columnNames)) { foreach ($columnNames as $column) { if (strpos($column, 'mail') !== false && isset($account[$column])) { $email = $account[$column]; } } } // В таблице с аккаунтами нет поля с Email. Нет смысла регать дальше аккаунт на сайте if (!$email) { throw new Exception('Аккаунт не найден'); } // Создаю аккаунт на сайте $userModel = Users::create($login, $email, Users::STATUS_ACTIVATED, $lsId, Users::ROLE_DEFAULT); $userModel->save(false); $siteAccountUserId = $userModel->user_id; } $found = true; } } // Аккаунт не найден if (!$found) { if ($siteAccountUserId) { UsersAuthLogs::model()->addErrorAuth($siteAccountUserId); } $this->incrementBadAttempt(); $this->addError($attr, 'Неправильный Логин или Пароль.'); } } catch (Exception $e) { $this->addError('login', $e->getMessage()); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ElectroMyStyle 2 Опубликовано 18 апреля, 2022 Нужно вскрывать JTS, смотреть логику авторизации и переписывать её в Ghtweb Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ElectroMyStyle 2 Опубликовано 18 апреля, 2022 В общем в JTS алгоритм шифрования - PBKDF2WithHmacSHA1, а в Ghtweb просто sha1. Поэтому после входа через LS пароль меняется с зашифрованным алгоритмом PBKDF2WithHmacSHA1 и нельзя войти через Ghtweb. Решение: переписать алгоритм регистрации, авторизации и восстановления пароля в Ghtweb или можно переписать авторизацию в JTS, если есть исходники 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Martali 0 Опубликовано 20 апреля, 2022 Спасибо за подсказку, ElectroMyStyle. В 18.04.2022 в 12:16, ElectroMyStyle сказал: В общем в JTS алгоритм шифрования - PBKDF2WithHmacSHA1, а в Ghtweb просто sha1. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты