首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RESTful服务保护来自跨域的API调用

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

Stack Overflow用户
提问于 2017-01-19 10:37:22
回答 3查看 1.5K关注 0票数 8

我有一个预订站点,在那里我向用户提供了几行代码,其中我将API键与代码一起添加到div中。用户必须在其网站中添加这些代码。然后使用ajax调用从我的站点加载视图。我关心的是:如何使用使用codeIgniter的restful服务使用公共和私有API密钥来保证这些调用的安全性?

我提供给用户的代码如下所示

代码语言:javascript
复制
    <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调用,并在用户站点上呈现视图。我如何使它像google的客户端和秘密密钥结构一样,使用restful服务使用纯API架构进行身份验证?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-31 17:50:18

Facebook、Google和其他大公司使用iframe来提供这类服务。

以facebook为例,它为您提供了脚本上的代码,在运行时会为特定视图创建一个iframe。

另外,您也不能进行跨站点ajax调用。只有从您的站点加载的iframe才能安全地加载页面。

现在,使用这些密钥,您可以始终在脚本中提供公钥。iframe将指向您的网站与$_SERVER['http_referer'],您可以确保api密钥是授权的。不要使用私钥,除非你不会发布任何私人机密数据。

票数 2
EN

Stack Overflow用户

发布于 2017-01-21 06:17:27

可以通过创建适当的头来模拟Ajax请求。如果希望进行基本检查,以确定请求是否为Ajax请求,则可以使用: 然而,if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request }不应该将您的安全性建立在此检查之上。如果您需要的话,它将消除对页面的直接访问。

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

票数 2
EN

Stack Overflow用户

发布于 2017-02-01 05:25:27

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

Auth0,一个身份验证提供者也有相当多的资源,我除了使用他们之前和喜欢他们的产品之外,没有其他联系。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41739650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档