不能从我自己的网站调用steam api网站(安全问题)

Cannot make calls to steam api site from my own site (Security Issue)

本文关键字:网站 安全 问题 api 调用 我自己 自己的 不能 steam      更新时间:2023-09-26

我正在尝试创建一个利用steam web api的web应用程序,总的来说,我基本上非常困惑如何启动这个应用程序。这个问题基本上概括了我的问题,我不知道如何确切地创建端点并解决这个问题。

目前我有Apache Tomcat为我的web服务器,我写所有的html/css/javascript代码在notepad++。我不想使用jQuery,因为我不知道是否需要。现在我要做的就是从steam的api中获取数据。

例如,使用这个api:

http://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamid=76561197960435530&relationship=friend

我只是想抓取一个用户的好友列表。问题是,正如我上面链接的问题,我不能从我自己的网站调用steam api,我不知道如何在我的服务器上创建一个端点并解决这个问题。

非常感谢任何帮助。我对这一切都很陌生,这绝对让我很困惑。

您可以使用mod_proxy从服务器代理请求到steam站点。首先需要在Apache中启用重写和mod代理

a2enmod rewrite
a2enmod proxy
apache2ctl reload

让我们假设您的网站是www.example.com和网络根是/var/www在您的服务器上。创建目录/var/www/steamapi。在这个目录中,用以下命令创建一个名为.htaccess的文件

RewriteEngine On
RewriteRule ^(.*)$ http://api.steampowered.com/$1 [P]

[p]告诉Apache代理请求。现在,在XHR/AJAX url参数

中使用绝对url,而不是向api.steampower.com发出请求
/steamapi/ISteamUser/GetFriendList/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamid=76561197960435530&relationship=friend
Apache将把请求重写为下面的URI,并将结果代理回给您。你的浏览器不会抱怨,因为你正在向同一个域发出请求。
http://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamid=76561197960435530&relationship=friend

据我所知,对于Steam的公共api,他们不应该像上面的答案所建议的那样需要代理来做AJAX请求(这是我假设你正在做的),因为他们肯定必须实现CORS。此外,这只是一个浏览器限制,不应该影响任何服务器端。

Dustin试图解释如何绕过的限制是与向您正在请求的不允许CORS(跨域资源共享)的域上的站点发出AJAX请求有关。因此,一个网站将把数据发送到一个代理服务器,这个代理服务器是为了代表它发出请求并返回数据而设置的。

你能详细说明当你试图提出请求时,你会遇到什么样的错误吗?

我假设你正在使用这里找到的api,https://developer.valvesoftware.com/wiki/Steam_Web_API GetPlayerSummaries_.28v0001.29

在这种情况下,我必须问,如果你看到所有的x在哪里,这些是URI中的占位符。你应该有一个Steam Web API密钥,你可以从这里注册:

https://steamcommunity.com/dev/apikey

我不确定域名在注册时是否那么重要,因为我之前已经改变了密钥的用途。

请注意,Valve的公共api是相当有限的,许多在网络上浮动的库不使用它们,而是通过反向工程Valve的Oauth登录代码为他们的主要站点使用私人的,未记录的web api,或者他们以某种方式反向工程桌面客户端本身。