Steam WebAPI AuthenticateUser

Как авторизовать пользователя через https://api.steampowered.com/ISteamUserAuth/AuthenticateUser/v0001 метод апи?

Например, я получу данные открытого ключа Steam с сайта https://steamcommunity.com/login/getrsakey/, выполните шифрование, а затем отправьте эти данные на указанный URL-адрес API как POST. Но сервер каждый раз возвращает «403 Forbidden».

Пример моего кода:

from Crypto.Cipher import AES
from Crypto.Cipher.PKCS1_v1_5 import PKCS115_Cipher
from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
import hashlib
import json
import requests

steamid = '<MY_STEAMID64>'
steampass = '<MY_STEAM_PASSWORD>'
loginkey = hashlib.md5(bytes(steampass, 'utf-8')).hexdigest()
blob32 = get_random_bytes(32)

getrsa_url = 'https://steamcommunity.com/login/getrsakey/'
getrsa_data = {'username': '<MY_STEAM_USERNAME>'}

getrsa_resp = requests.get(getrsa_url, params=getrsa_data)
response = json.loads(getrsa_resp.text)
if response.get('success'):
    steam_publickey_mod = response.get('publickey_mod')
    steam_publickey_mod = int(steam_publickey_mod, 16)
    steam_publickey_exp = response.get('publickey_exp')
    steam_publickey_exp = int(steam_publickey_exp, 16)
    steam_rsa_key = RSA.construct((steam_publickey_mod, steam_publickey_exp))
    steam_rsa = PKCS115_Cipher(steam_rsa_key)

if steam_rsa_key.can_encrypt():
    sessionkey = steam_rsa.encrypt(blob32)
    if type(sessionkey) is tuple:
        sessionkey = sessionkey[0]
    steam_aes = AES.new(blob32)
    encrypted_loginkey = steam_aes.encrypt(loginkey)

if all([steamid, sessionkey, encrypted_loginkey]):
    authenticate_user_url = (
        'https://api.steampowered.com/ISteamUserAuth/AuthenticateUser/v0001')
    authenticate_user_json = {
        'steamid': steamid,
        'sessionkey': sessionkey,
        'encrypted_loginkey': encrypted_loginkey,
    }


if __name__ == '__main__':
    import ipdb
    ipdb.set_trace()
    authenticate_user_resp = requests.post(url=authenticate_user_url,
                                           data=authenticate_user_json)

authentication_user_resp.ok возвращает False

authentication_user_resp.status_code возвращает 403

authentication_user_resp.reason возвращает Запрещено

Извините за мой плохой английский, пожалуйста


person sivakov512    schedule 12.06.2016    source источник


Ответы (2)


AuthenticateUser не делает того, что вы думаете. Он используется клиентом Steam для получения файлов cookie входа в веб-сеанс для пользователя, который в данный момент вошел в клиент. Логин, который запрашивает AuthenticateUser, исходит от CM (сервера, к которому подключается клиент).

Если вы хотите авторизовать пользователя на веб-сайтах, вам нужно использовать для этого конечные точки HTTP. После того, как у вас есть ключ RSA и вы зашифровали свой пароль с помощью этого ключа, вы можете пройти аутентификацию, отправив POST на https://steamcommunity.com/login/dologin/ с этими закодированными параметрами в теле:

  • captcha_text — пустая строка или текст CAPTCHA, который вам предложили
  • captchagid - GID CAPTCHA, которую вам предложили, или -1, если вы не были
  • emailauth — код Steam Guard, отправленный на ваш адрес электронной почты, или пустая строка, если это не применимо
  • emailsteamid - Пустая строка
  • loginfriendlyname - Пустая строка
  • password — Ваш пароль, зашифрованный с помощью открытого ключа RSA, и полученный зашифрованный текст в base64.
  • remember_login - true если хотите запомнить логин или false если нет (строки true и false)
  • rsatimestamp - Отметка времени, которую вы получили с помощью ключа RSA
  • twofactorcode — код TOTP, который вы получили из мобильного приложения, или пустая строка, если это не применимо.
  • username - Имя вашей учетной записи
person Dr. McKay    schedule 18.06.2016

Насколько я понимаю, вам не разрешено выполнять эту операцию, следовательно, «403 запрещено». Итак, вы просто не «авторизованы» для выполнения этого с имеющимися у вас учетными данными.

https://en.wikipedia.org/wiki/HTTP_403

Ответ 403 обычно указывает на одно из двух условий:

Аутентификация была предоставлена, но аутентифицированному пользователю не разрешено выполнять запрошенную операцию. Операция запрещена для всех пользователей. Например, запросы на список каталогов возвращают код 403, когда листинг каталогов отключен.

person glls    schedule 12.06.2016
comment
Я должен быть авторизован для вызова метода аутентификации? Как? :) Например, если я вызываю это через get, код возврата сервера 405, причина «Метод не разрешен» и текст «Этот API должен быть вызван с запросом HTTP POST» - person sivakov512; 12.06.2016
comment
какой API вы пытаетесь использовать из 4 (ITFItems_440, ISteamUser, ISteamUserStats, ISteamNews)? - person glls; 12.06.2016
comment
ISteamUserAuth. Этот интерфейс содержит два метода. - person sivakov512; 12.06.2016
comment
Вы можете увидеть это с помощью api.steampowered.com/ISteamWebAPIUtil/GetSupportedAPIList/v1. - person sivakov512; 12.06.2016