使用RESTful服务保护跨域的API调用

时间:2017-01-19 10:37:22

标签: php ajax rest codeigniter api

我有一个预订网站,我向用户提供了几行代码,我在div中添加了API密钥以及代码。用户需要在他们的网站中添加这些代码。然后我使用ajax调用从我的站点加载他们站点上的视图。我担心的是:如何使用公共和私有API密钥使用codeIgniter使用restful Web服务来保证这些调用的安全性?

我提供给用户的代码类似于

    <link rel="stylesheet" type="text/css" href="http://localhost/bookingpoints_com/apiTesting/styles/first.css" />
    <script src="http://localhost/bookingpoints_com/contents/scripts/jquery.js" ></script>
    <script src="http://localhost/bookingpoints_com/contents/scripts/apiused.js" ></script>
    <script src="http://localhost/bookingpoints_com/apiTesting/scripts/common.js" ></script>         
    <div id="api-data-reserve" name="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNXRlc3QgY29kZTE=" data="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNW1HVnZ3YVhMRVc=" sitekey="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNQ=="></div>

通过这些代码行,我对我的网站进行了ajax调用,并在用户网站上呈现视图。如何使用纯API架构使用restful服务进行身份验证,使其像google的客户端和密钥结构一样工作?

3 个答案:

答案 0 :(得分:2)

  

可以通过创建Ajax来模拟Ajax请求   合适的标题。如果你想要进行基本检查,看看是否有   request是您可以使用的Ajax请求:

     

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request },但是你永远不应该以你的为基础   这张支票的安全性。它将消除对页面的直接访问   如果这就是你所需要的。

但这还不够,您必须使用服务器端脚本(例如PHP)来保护您的Ajax调用。例如,如果您的AJAX将密钥传递给PHP文件,请在PHP文件中编写代码以确保它是正确的密钥。

答案 1 :(得分:2)

Facebook,Google和其他大型公司使用 iframe 来提供这类服务 以facebook为例,它为您提供脚本以放入代码,运行时将为特定视图创建iframe。

此外,您无法进行跨站点ajax调用。只有从您网站加载的iframe才能安全地加载页面。

现在使用密钥,您始终可以在脚本中提供公钥。 iframe href将指向您$_SERVER['http_referer']的网站,您可以确保api密钥已获得授权。除非您不打算发布任何私人机密数据,否则请勿使用私钥。

答案 2 :(得分:2)

我在一段时间后写了一篇关于保护REST API的文章,特别是那些浏览器使用的API。我建议看看https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/

Auth0,身份验证提供商也拥有相当多的资源,除了之前使用过它们之外我没有任何联系,并且喜欢他们的产品。

许多API都是通过JWT保护的,因为它们允许您在没有集中式auth服务器的情况下对API调用进行身份验证。它们基于公共/私有加密算法,其中两个密钥在数学上相关。密钥是在受信任的环境(例如您的服务器)中生成的,但任何人都可以验证它们来自他们所说的人。您可以设计其他身份验证令牌方案。

根据您的需要,任何客户端都可以访问密钥,因此您可以设计特定的权限模型以确保密钥具有最小权限(即,它们不应具有管理员权限等)