Передача пароля
Разбираюсь тут с авторизацией в сетевом городе (нужно вытащить данные со стенки, всякие там объявления и прочее и передать данные в бота ибо лень каждый раз ходить к компу, а с телефона сайт не очень отзывчивый). Дак вот, я уже решил первую часть загадки - а именно как в сервисе генерируется хэш пароля, но вот со второй частью беда.
Базовая ссылка для запросов: https://sgo.egov66.ru/webapi
Итак, авторизация происходит в два этапа. На первом отправляется пустой запрос по адресу /auth/getdata. В ответ прилетает JSON, примерно такой:
{
"lt": 1062826537,
"ver": 716938095,
"salt": 32591442154
}
На втором этапе формируется запрос на авторизацию, в POST запросе следующие поля:
$body = [
"LoginType" => "1", // кто: организация\управление
"cid" => "2", // кто: ID организации
"sid" => "66", // где: регион
"pid" => "-3", // где: район
"cn" => "3", // где: город
"sft" => "2", // кто: тип организации
"scid" => "57", // кто: ID школы
"UN" => $username,
"PW" => $PW,
"lt" => $lt_from_getData,
"pw2" => $password_hash,
"ver" => $ver_from_getData
];
Ну и немного заголовков:
$headers = array(
"Accept: application/json",
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
);
И собственно пароль отправляется на /login:
$curl = curl_init($base . "/login");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($body));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$resp = curl_exec($curl);
curl_close($curl);
Но, в ответ прилетает:
{
"message":"Object reference not set to an instance of an object.",
"details":null
}
А должно:
{
"message":"Неправильный пароль или имя пользователя",
"details":null
}
Хэш для pw2 генерируется вот так:
$pw2 = md5($salt.md5($pass));
И он полностью совпадает с хэшем, отдаваемым на сайте.
Но, вот что такое PW в запросе - загадка (для меня дак точно). Единственное, что знаю - длина строки совпадает с длиной пароля. Я подозреваю, что это случайная строка определенной длины, но поскольку не могу авторизоваться, я уже начинаю в этом сомневаться.
Ну или второй возможный вариант - это неверное указание заголовков запроса.
Помогите разрешить ситуацию и пара учителей вам будет очень благодарна))
Ответы (1 шт):
По крайней мере сейчас PW - первые символы в md5 хэше по длине пароля.
Например:
Пароль - 123123
Хэш - b7g84f7gi48f...
В таком случае PW - b7g84f
Надеюсь помог