我有一个预订站点,在那里我向用户提供了几行代码,其中我将API键与代码一起添加到div中。用户必须在其网站中添加这些代码。然后使用ajax调用从我的站点加载视图。我关心的是:如何使用使用codeIgniter的restful服务使用公共和私有API密钥来保证这些调用的安全性?
我提供给用户的代码如下所示
<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架构进行身份验证?
发布于 2017-01-31 17:50:18
Facebook、Google和其他大公司使用iframe来提供这类服务。
以facebook为例,它为您提供了脚本上的代码,在运行时会为特定视图创建一个iframe。
另外,您也不能进行跨站点ajax调用。只有从您的站点加载的iframe才能安全地加载页面。
现在,使用这些密钥,您可以始终在脚本中提供公钥。iframe将指向您的网站与$_SERVER['http_referer'],您可以确保api密钥是授权的。不要使用私钥,除非你不会发布任何私人机密数据。
发布于 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文件中编写代码以确保这是正确的键。
发布于 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调用。它们基于公共/私有密码算法,其中两个密钥在数学上是相关的。密钥是在受信任的环境中生成的,比如您的服务器,但是任何人都可以验证它们来自于他们说自己来自谁。您可以设计其他身份验证令牌方案。
根据您的需要,任何客户端都可以访问这些密钥,因此您可以设计一个特定的权限模型,以确保密钥具有最少的权限(即它们不应该具有管理权限,等等)
https://stackoverflow.com/questions/41739650
复制相似问题