【问题标题】:How do I set up an API web key with URL authentication in Javascript and PHP?如何在 Javascript 和 PHP 中使用 URL 身份验证设置 API Web 密钥?
【发布时间】:2012-03-07 18:56:15
【问题描述】:

所以我一直读到我的眼睛在流血,所以这是我的问题......

我的后端是 PHP

我想在网上推出一项服务,我们称之为 GREATSERVICE.com。我想让人们注册一个 API 密钥并按域限制它,以便只有 http://www.????.com 可以使用它。 我知道我可以只存储该人输入数据库的 API 和域。

我不知道如何验证该服务是否被正确的网站访问。

我的意思是说我正在使用域地址 temp-13-43.xfinity.com 浏览网络,然后我会访问网站 servicehost.com。 servicehost.com 有一个 API 密钥....我如何识别服务是从 servicehost.com 访问的,而不是客户端 temp-13-43.xfinity.com 地址...

所以我想弄清楚的是在客户端的 javascript 中。有点像谷歌地图。地图只是使用 API 密钥将一些 javascript 加载到页面上,但 API 密钥会检查网站的 URL,而不是访问网站的客户端。

那是我迷路的地方。我如何检查用户访问的站点的 DOMAIN,并且只有当它使用正确的 API 时它是正确的,然后才呈现服务。

所以在头部我有 javascript

So on the SERVICEHOST site I give them the code so that they can use the mygreatservice widget. Think along the lines of the twitter embeded viewer

<SCRIPT type="text/javascript" src="http://mygreatservice.com/service.php?api=asdfasdfasdfa></SCRIPT

标签指向一个PHP页面返回需要的javascript。同样,我只是想确保我要返回的小部件在适当的站点上用于轻度安全/跟踪目的。

谢谢

【问题讨论】:

  • 会员必须注册才能为其应用获取唯一令牌。然后,将他们的域和令牌添加到数据库。您需要做的就是检查这些详细信息是否与 API 请求匹配。如果可以的话,看看 Facebook Developers。
  • 好的,但是每当客户访问它时,我如何将 servicehost 站点的值返回到我的脚本。您的评论是我所知道的理论,但在实践中我需要确保 servicehost.com 是请求信息的站点。

标签: javascript security api web key


【解决方案1】:

编辑:

请您的成员将此行放在他们的站点中:(例如,我将此代码放在我的服务器中 http://www.otherserver.com

<script language="javascript" src="http://yourserver.com/service.php?token=342424adsasjdl34"></script>

在您的 service.php 文件中(托管在您的服务器上):

$server = $_SERVER['SERVER_NAME']; // =www.otherserver.com
$apitoken = $_GET['token']; // the token 342424adsasjdl34 (don't forget to make it safe!)

【讨论】:

  • 我不太清楚您将它们发送到 PHP 文件是什么意思。源不能只是 service.php 吗?
  • 好吧,我想我现在理解得更好了。因此,在这种情况下,我可以返回在页面中嵌入小部件所需的所有 JSON 和其他函数。
  • 没错。如果你在你的service.php文件中写echo "bla",它就会出现在客户的网站上。
  • 最后一点...我知道 $_SERVER 变量可以被欺骗...您知道的任何方式吗?
  • 这行不通。 $server 仍会读取 yourserver.com。如果您想要 www.otherserver.com,可以检查referer 标头,但请注意,referrer 标头并不总是可用。
【解决方案2】:

那是我迷路的地方。如何检查该网站的 DOMAIN 用户去了并且只有当它使用正确的 API 时才正确 渲染服务。

这将为您提供有关发起请求的主机的大量信息:

echo $_SERVER

特别是echo $_SERVER['HTTP_HOST']

现在您需要检查此 HTTP_HOST 是否具有您的 Web 服务可以验证的合法 API 密钥。

【讨论】:

  • 好吧,不要打开一罐可以被欺骗的蠕虫,有没有更好的方法?
猜你喜欢
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 2019-09-04
  • 2020-09-20
  • 1970-01-01
相关资源
最近更新 更多