При взаимодействии со стимом стоит задача в виде реализации работы на POST-GET запросах. Проблема возникла при попытке авторизации в существующий аккаунт. Оказалось, что пароль, перед отправкой в форму запроса, шифруется с помощью алгоритма RSA, и затем уже в зашифрованном виде передается в форму для запроса. Отследил запросы, первым идет POST "https://steamcommunity.com/login/getrsakey/" И возвращает следующее(на данный момент не имеет значения то, что мы отправляли в нашем запросе): Код:
{
"success":true,
"publickey_mod":"/* publickey_mod */",
"publickey_exp":"010001",
"timestamp":"435743550000",
"token_gid":"/* тут token_gid */"
}
Для RSA нам требуются 2 значения: publickey_mod и publickey_exp. В полученном виде работать с ними не удается, так как их нужно привести к base64. После приведения к base64 и создания ключа, удалось получить в зашифрованном виде сам пароль. Запрос с авторизацией("https://steamcommunity.com/login/dologin/"):
Form Data:
donotcache: 1577689139522
password: /* crypted pass */
username: username
twofactorcode:
emailauth:
loginfriendlyname:
captchagid: -1
captcha_text:
emailsteamid:
rsatimestamp: 439344650000
remember_login: false
Как итог, в ответе получают ошибку с сообщением о неудачном входе(неправильный пароль или имя пользователя). В чем может быть ошибка, не знаю. Вот еще ниже проложу реализацию шифрования на NodeJS(Для тестов, брал из консоли полученный пароль и пытался авторизоваться):
const RSA = require('node-rsa');
var key = new RSA();
key.setOptions({encryptionScheme: ''});
key.importKey({
n: Buffer.from('/* Здесь publickey_mod */', 'hex'),
e: Buffer.from('010001', 'hex')
}, 'components-public');
var test = 'hello';
var crypt = key.encrypt(test, 'base64');
console.log(crypt);