2016-06-12 3 views
1

Как зарегистрировать пользователя через https://api.steampowered.com/ISteamUserAuth/AuthenticateUser/v0001 api method?Steam WebAPI AuthenticateUser

Например, я получаю данные открытого ключа от https://steamcommunity.com/login/getrsakey/, сделайте некоторое шифрование, а затем отправьте эти данные указанному api url как 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) 

authenticate_user_resp.ok возвращает значение False

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

authenticate_user_resp.reason возвращается Запрещенные

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

ответ

1

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

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

  • captcha_text - пустая строка или текст капчи вы были запрошено
  • captchagid - ГУР от капчи ты запрошен, или -1, если вы не были
  • emailauth - код Парового Guard отправлен на ваш адрес электронной почты, или пустую строку, если не применим
  • emailsteamid - Пустая строка
  • loginfriendlyname - пустая строка
  • password - Ваш пароль шифруется с помощью открытого ключа RSA, и полученный шифротекста в base64
  • remember_login - true, если вы хотите запомнить свой логин или false, если нет (строки true и false)
  • rsatimestamp - отметка, который вы получили с RSA ключа
  • twofactorcode - код TOTP вы получили от вашего мобильного приложения, или пустой строкой, если не применим
  • username - Ваша учетная запись
+0

О, спасибо! Можете ли вы рассказать мне, как получать файлы cookie с помощью AuthenticateUser, если я в настоящее время разрешен с помощью запроса https://steamcommunity.com/login/dologin/? (как правильно создать параметры, необходимые по методу) – CryptoManiac

+0

Аутентификация с помощью функции dologin даст вам куки. Вам не нужно использовать AuthenticateUser. –

+0

И steamMachineAuth? – CryptoManiac

0

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

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

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

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

+0

У меня должен быть разрешен вызов метода auth? Как? :) Например, если я вызываю это через get, код возврата сервера 405, причина «Метод не разрешен» и текст «Этот API должен быть вызван с HTTP POST-запросом» – CryptoManiac

+0

, какой api вы пытаетесь использовать из 4 (ITFItems_440 , ISteamUser, ISteamUserStats, ISteamNews)? – glls

+0

ISteamUserAuth. Этот интерфейс содержит два метода. – CryptoManiac