如何在Javascript和PHP中设置带有URL身份验证的API web密钥?

如何在Javascript和PHP中设置带有URL身份验证的API web密钥?,javascript,security,api,web,key,Javascript,Security,Api,Web,Key,所以我一直在读,直到我的眼睛流血,所以这里是我的问题 我的后端是PHP 我有一个服务,我想把它放在网上,我们叫它GREATSERVICE.com。我想让人们注册一个API密钥,并按域限制它,以便只能使用它。 我知道我可以将用户输入的API和域存储到数据库中 我被挂断了关于如何验证服务是否被适当的网站访问 我的意思是,假设我正在使用域地址temp-13-43.xfinity.com浏览web,然后访问网站servicehost.com。servicehost.com有一个API密钥…如何识别服务是

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

我的后端是PHP

我有一个服务,我想把它放在网上,我们叫它GREATSERVICE.com。我想让人们注册一个API密钥,并按域限制它,以便只能使用它。 我知道我可以将用户输入的API和域存储到数据库中

我被挂断了关于如何验证服务是否被适当的网站访问

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

所以我想弄明白的是如何在客户端用javascript实现这一点。有点像谷歌地图。Maps只是使用API键将一些javascript加载到页面上,但API键检查网站的URL,而不是访问网站的客户端

那就是我迷路的地方。我如何检查用户访问的站点的域,并且只有在正确的API正确的情况下,才能呈现服务

所以在head部分我有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正确的情况下,用户才转到 提供服务

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

echo $_SERVER
特别是echo$\u服务器['HTTP\u主机']

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

编辑:

请您的成员将这一行放在他们的站点中:例如,我将此代码放在我的服务器中


会员必须注册才能获得其应用程序的唯一令牌。然后,将他们的域和令牌添加到数据库中。您所需要做的就是检查这些细节是否与API请求匹配。如果可以的话,看看Facebook开发者。好吧,但是每次客户端访问servicehost站点时,我如何将其值返回到脚本中。你的评论是我知道的理论,但在实践中,我需要确保servicehost.com是请求信息的网站。啊,好吧,不要打开一罐蠕虫,这可能会被欺骗,那么有更好的方法吗?我不太清楚你说的将它们发送到PHP文件是什么意思。源代码不能是service.php吗?好的,我想我现在理解得更好了。因此,在这个例子中,我可以返回所有JSON和我需要的其他函数,以将小部件嵌入页面中。没错。如果您在service.php文件中写入echo bla,它将出现在客户端的网站上。最后一点…我知道$\u服务器变量可能被欺骗…您知道的任何方法?这都行不通$服务器仍将读取yourserver.com。如果需要www.otherserver.com,您可以检查referer标头,但请注意,referer标头并非始终可用。
<script language="javascript" src="http://yourserver.com/service.php?token=342424adsasjdl34"></script>
$server = $_SERVER['SERVER_NAME']; // =www.otherserver.com
$apitoken = $_GET['token']; // the token 342424adsasjdl34 (don't forget to make it safe!)