2016-06-12 14 views
1

https://api.steampowered.com/ISteamUserAuth/AuthenticateUser/v0001 apiメソッドを使用してユーザーを認証する方法はありますか?Steam WebAPI AuthenticateUser

例えば、私は蒸気の公開鍵データをhttps://steamcommunity.com/login/getrsakey/から取得し、暗号化して、このデータをPOSTとして指定されたapi urlに送信します。 しかし、サーバーは毎回「403禁止」を返します。

私のコード例:

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は、偽

authenticate_user_resp.status_codeが私の悪い英語のための

申し訳禁断の403の

authenticate_user_resp.reasonリターンを返してください返します

答えて

1

AuthenticateUserは、あなたが思っていることをしません。これは、現在ログインしているユーザーのWebセッションログオンCookieを取得するためにSteamクライアントによって使用されます。 AuthenticateUserが要求するログインキーは、CM(クライアントが接続するサーバ)から取得します。

ユーザーをWebサイトにログインする場合は、HTTPエンドポイントを使用してユーザーをログインする必要があります。 - 空の文字列またはあなたがしてきたCAPTCHAのテキスト

  • captcha_text:あなたはRSAキーを持っているし、そのキーを使ってパスワードを暗号化してきたら、体内でこれらのURLエンコードのパラメータとhttps://steamcommunity.com/login/dologin/に掲載することにより認証を行うことができます
  • captchagidが表示 - あなたが促されてきたCAPTCHAのGID、または-1あなたは
  • emailauthされていない場合 - スチームガードのメールアドレスに送信されたコード、または空の文字列でない場合は、適用
  • emailsteamid - 空の文字列
  • loginfriendlyname - 空の文字列
  • password - あなたのRSA公開鍵で暗号化されたパスワード、およびbase64で
  • remember_loginでの結果の暗号文 - あなたは、ログインまたはfalseない場合(文字列trueを覚えておきたい場合はtruefalse
  • rsatimestamp - あなたはRSAキー
  • twofactorcodeで得たタイムスタンプ - あなたのモバイルアプリ、または空の文字列でない場合は、適用
  • からもらったTOTPコード
  • username - あなたのアカウント名
+0

ああ、ありがとう! https://steamcommunity.com/login/dologin/に依頼して現在認証を受けている場合、AuthenticateUserでCookieを取得する方法を教えてください。 (メソッドで必要なパラメータを正しく作成する方法) – CryptoManiac

+0

dologinで認証するとCookieが取得されます。 AuthenticateUserを使用する必要はありません。 –

+0

とsteamMachineAuth? – CryptoManiac

0

私は、あなたがこの操作を行うことを許されていないので、 "403禁止されています"ので、単にあなたが持っている資格情報でこれを実行する権限がありません。

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

403応答は、一般的に2つの条件のいずれかを示します

認証を設けたが、認証されたユーザは、要求された操作を実行することを許可しない れます。操作はすべてのユーザーに禁止されている です。たとえば、ディレクトリー・リストが無効化されている場合、 ディレクトリー・リストの要求は戻りコード403となります。

+0

私は認証方法を呼び出す権限が必要ですか?どうやって? :)たとえば、私はこれをget、サーバーリターンコード405、理由 'Method not allowed'とテキスト 'HTTP POSTリクエストで呼び出す必要があります'を – CryptoManiac

+0

で呼び出すと、どのAPIを4から使用しようとしていますか(ITFItems_440 、ISteamUser、ISteamUserStats、ISteamNews)? – glls

+0

ISteamUserAuth。このインタフェースには2つのメソッドがあります。 – CryptoManiac

関連する問題