云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

负载均衡_免费数据库服务器_限量秒杀

小七 141 0

最近,一位客户问我是否可以在API管理中检查API使用者是否真的只读取他的数据。虽然这是一个典型的主体传播用例(用户ID被传播到后端,在后端,全球云购,他的权利被强制执行),但我发现这个想法很有趣。

更有趣的是,这个用例展示了SAP API管理在处理特定于客户的请求时的灵活性。

如果您想实现这一点使用案例,您需要访问SAP云平台API管理环境,并且您应该了解API管理的基础知识。

如上所述,公司希望以自助服务模式向客户公开数据。这是通过API管理集中管理的API完成的。

公司希望在所有级别上实施安全性,人工智能可以做什么,因此他们还希望API管理检查客户是否只访问其数据。

让我们假设API是OData API。为了为用户检索数据(例如销售订单),企业应用平台,应用程序将调用如下资源:

为了执行身份验证,应用程序可以向api管理发送基本身份验证、api密钥或令牌。从这些我们可以得到客户名称。

但是为了简化我们的示例,我们将使用一个包含调用资源的客户ID的查询参数:

如果发送到API代理的客户ID与响应负载匹配(即,小程序建站,如果客户请求自己的销售订单),一切都很好。

但让我们想象一下,有人对应用程序或网站进行反向工程,并试图通过更改API调用来访问其他客户的销售订单。这应该在API管理中被拦截(在使用主体传播的后端系统中)。

让我们看看如何做到这一点。

我假设您有一个REST API后端。出于测试目的,您可以使用sapdeves5系统,这是一个互联网可用的SAP虚拟系统。以下是如何获得帐户:https://developers.sap.com/tutorials/gateway-demo-signup.html

在API管理服务中,按如下方式创建API提供程序:

如前所述,我们需要先获取客户ID。这个参数由应用程序作为查询参数传递。显然,免费云服务器,对于生产性场景,您可能希望使用API密钥、OAuth或JWT令牌,从中可以获得用户信息。

现在,打开API代理的策略编辑器。

选择"Sales Order Set"资源(通过单击名称旁边的蓝色"0")。此资源包含特定客户的销售订单,可以根据需要进行筛选。

在请求中添加"提取变量"策略:

此策略将客户ID存储在变量中以供以后使用。

现在我们将从销售订单API调用响应中获取客户ID。

我们将使用另一个提取变量执行此操作。

选择"销售订单集"资源。

在响应中添加"提取变量"策略:

此策略将客户ID存储在变量中,以备以后使用。

因为您不能在代理表达式中直接比较两个变量,我们将使用一个小的javascript来完成这个任务。

在响应上添加一个"javascript"策略:

在策略编辑器(左侧菜单)的"脚本"部分添加实际的Java脚本,名称与上面相同。

我使用的代码(我不是JS god…)如下:

如您所见,我们正在将另一个变量"differentCustomerID"设置为保留两个客户ID的比较结果。

最后一步:停止执行API代理,如果检测到不同的客户ID,则引发403错误。

在响应通道的末尾添加"引发错误"策略:

现在的诀窍是仅当客户ID不相同时才会引发此错误,例如,如果JavaScript中创建的变量为"false"。

只需在"Raise Fault"策略执行中添加以下条件:

您的流程应该是这样的:

现在是时候测试我们的小示例了。

我始终建议使用Postman进行API测试:您可以完全配置,根据需要保存和组织您的请求。

在请求和响应中使用相同的客户ID进行测试

您将需要在API调用中为后端系统(如SAP Dev ES5的basic)设置身份验证。

然后使用以下URL调用API管理代理:

https://。hana.ondemand.com:443/v1/AccessControlTest//SalesOrderSet(‘0500000000’)?customerIDParam=0100000000

SalesOrderSet 050000000是customer 0100000000中的一个。

没问题。

在请求和响应中使用不同的客户ID进行测试

让我们看看如果我尝试从另一个销售订单请求数据会发生什么

https://。hana.ondemand.com:443/v1/AccessControlTest//SalesOrderSet(‘0500000001‘)?customerIDParam=0100000000

API代理现在抛出一个错误:请求参数中的客户ID与响应中的客户ID不相同。

如您所见,根据您的组织的请求,在API管理中添加特定功能非常简单。尤其是安全性是API管理的一个非常重要的方面,但是安全性应该在每个级别上实现。这包括在后端系统/API中验证访问权限,而不仅仅是在API管理层。