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

金山云_数据库技术及应用教程_限量秒杀

小七 141 0

在我以前的博客文章中,我已经能够利用SAP提供的不同平台和工具来连接我的Amazon Echo Dot,并向内部部署的后端SAP ABAP服务器发出简单请求更新SAPUI5应用程序显示并返回口头响应。

但是,我明确没有提及任何关于保护API端点的内容,也没有详细说明用户身份的验证。因此,让我们在这篇文章中讨论保护API端点的问题。

我通过触发来自第三方API工具的请求来测试我当前的API端点,该工具具有有效的JSON主体(就像Alexa将如何形成它),它实际到达了我的后端SAP服务器,并返回了有效的响应。这不是一件好事。

这意味着任何知道我的API端点的完整URL的人都可以从任何API/REST工具免费向我的后端SAP服务器发送或潜在地淹没请求。

我需要尽快找到保护我的API端点的方法!

虽然这并不重要,因为整个演示只是一个在开发者试用版ABAP服务器上运行的PoC,淘客服,但我正在寻找一个借口来试用新发布的Cloud Foundry试用版,并获得更多SAP云平台的实践经验,学生云服务器,所以我提出了这个要求!

我对上述问题的解决方案是:(1)向我的API端点添加一个新策略来验证应用程序密钥;(2)利用Cloud Foundry应用程序来验证请求是否确实是从Alexa发送的,并使用请求头中的应用程序密钥触发API端点来标识自己

以下是解决方案类似于

解决方案的第一部分是向API端点添加某种形式的身份验证。我选择添加一个策略来验证将在请求头中发送的静态应用程序密钥,在请求头中,只有授权的应用程序才能知道并在到ProxyEndpoint的预流期间进行验证。

要做到这一点,我必须在SAP Cloud Platform–API管理中执行以下三个简单步骤:

1。在API门户上创建一个产品并将其链接到API端点

2.通过在开发人员门户上创建一个应用程序来使用该产品,该应用程序将生成一个应用程序密钥

3。返回API门户并将一个新策略添加到API预流–ProxyEndpoint称为Verify API Key

一旦以上三个步骤完成,并且如果我尝试使用第三方API工具再次触发同一个API端点–我现在将得到如下错误。

但是,如果我在请求的头中设置'APIKey'并再次触发API端点,它现在将成功。

完美!我现在在我的api端点上添加了一个简单的api密钥验证,这个改变也完全打破了我现有的解决方案,因为Alexa不能再调用这个API了,企业管理平台软件,因为它不能在调用过程中传递新的HTTP头"APIKey"。

这让我们进入解决方案的第二部分。

阅读Amazon Alexa的开发者文档,了解如何将自定义技能作为web服务托管,有一些安全建议,特别是关于验证请求是否确实是由Alexa发送的,作为保护API端点不受潜在攻击的一种方法攻击者。参考: https://developer.amazon.com/public/solutions/alexa/alexa skills kit/docs/developing-an-alexa-skill-as-a-web-service#验证-请求是由alexa发出的

因为我个人的目标是尝试新的cloudfoundry,所以我希望部署一个简单的节点.js将作为新的API(1)验证请求是否来自Alexa,以及(2)使用标题"APIKey"将自己标识到API管理中发布的API端点。

在我考虑尝试从Amazon手动编写这些需求之前(考虑到我的技能,这是不可能的),在npmjs上快速搜索"alexa-verifier"返回了一些有希望的结果。太完美了!有人已经考虑过这一点,并且非常友好地将其打包到一个易于使用的npm模块中。

为了设计这个解决方案的第二部分,我把一个简单的节点.js+快递.js使用两个npm模块的应用程序–alexa verifier中间件和express http代理。

此应用程序将首先调用alexa verifier中间件来验证调用是否确实来自alexa,然后使用express http代理来硬编码标头APIKey并将请求转发给在API管理上发布的API端点。

下面是我为获得节点.js+快递.js应用程序推送到SAP Cloud Foundry.

1。在我的SAP云平台试用帐户上激活Cloud Foundry试用版。

2。在我的电脑上安装Cloud Foundry的CLI

3。设置Cloud Foundry API端点

4。登录SAP Cloud Foundry

5。将我的应用程序推送到Cloud Foundry

随着应用程序在Cloud Foundry上运行,我现在可以通过我的第三方API工具运行另一个测试,并直接向Cloud Foundry应用程序发送请求。这将是一个阴性测试。

太棒了!Cloud Foundry上部署的应用程序现在验证我从第三方API工具发送的请求不是有效的请求,因为我缺少通常在实际Alexa请求中的参数。

让我们将这个新的API端点URL更新到Amazon技能工具包(ASK)中。

Ta da!

我现在为Alexa更新了一个API端点,它是部署在Cloud Foundry上的一个应用程序,通过API管理上的一个基本API密钥验证来验证和标识自己。