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

免备案CDN_java对象存储_价格

小七 141 0

如果你在API方面做了很多工作,那么这对你来说可能只是一次闲逛——但对我来说,花了很长时间才弄清楚如何做到这一点。所以我想我分享我的经验和解决方案。但请记住…

!我并不认为下面的指南是执行OAuth1.0请求签名的最佳实践或最佳方法。下面的指南包含一个可能的解决方案,为我工作!

用例和API细节

我已经订阅了一个开放的REST API,我想在Fiori应用程序中使用。API提供程序要求使用OAuth1.0,使用HMAC-SHA1签名算法对所有请求进行正确签名。当我订阅API时,我收到了以下数据:

API端点:https://provider/api(我不确定是否可以提供正确的提供商地址,所以我使用的是虚构的地址)API使用者密钥:abcd1234(演示值)API Consumer secret:1234zzzz5678(演示值)

下面是关于如何对OAuth 1.0请求(重写)进行签名的说明:

通过连接HTTP方法(GET或POST)、请求URL、,查询参数的格式如下:

对于OAuth身份验证,每个请求都需要以下标准化参数:

OAuth\u consumer\u key:注册时发送的consumer keyoauth\u签名\u方法:必须是"HMAC-SHA1"oauth\u timestamp:日期和时间,以自1970年1月1日00:00:00 GMT以来的秒数表示。时间戳值必须是正整数,并且必须等于或大于以前请求中使用的时间戳oauth\u nonce:为请求随机生成的字符串,可与时间戳组合以产生唯一值oauth\u版本:必须是"1.0"

参数以"name=value"格式编写,并使用字典字节值排序。最后,参数按排序顺序连接成一个字符串,每个名称-值对由一个"&"字符分隔。

计算签名并作为参数添加:

oauth\u签名:使用HMAC-SHA1签名算法计算签名,其中文本是签名基字符串,密钥是签名的串联值上面的Consumer Secret和Access Secret由"&"字符分隔(即使请求不需要访问令牌,show"&")

也清楚地表明,每个请求都需要相当多的工作和参数才能正常工作。因此,对我来说,最好的办法就是在SAP云平台API管理中。

SAP云平台API管理设置

首先我们需要在API门户中创建我们的API。

我们将使用策略,以便不必处理所有参数和计算签名,每次在我们的应用程序中,当我们想调用API的时候。相反,我们将确保入站预处理流中的API策略将添加所有必需的参数并对请求进行签名,以便API提供程序接受发送的请求。

如何做到这一点?老实说,在我开始之前,我自己也不知道,但最后没那么糟。问问你自己,你到底想做什么?对于这个用例,答案是:

还不错。让我们来处理第一个也是最简单的部分:在请求进入API提供程序之前,将URL参数添加到请求中。

一旦部署了API,请单击如下所示的策略按钮(我相信您需要先部署一次,在您可以添加策略之前,但我可能错了,我不完全记得-无论哪种方式,如果您没有看到策略按钮,请部署您的API)-请注意,策略按钮可能隐藏在"三点按钮"下:

您现在在策略编辑器中。在左侧可以看到"流",您可以在其中添加策略。我们已经确定了用于此用例的策略:TargetEndpoint PreFlow(在发送到实际的API提供者之前)。

在右侧,您可以看到要添加的不同策略。我们希望将参数添加到请求URL中,并为此使用名为"Assign Message"的参数。下面是操作方法:

策略已经为您提供了一些示例代码,但下面是OAuth 1.0请求所需的内容—我们添加了所有额外参数:

以上是什么意思?非常简单:在"Add"标记中,我们使用每个参数的"QueryParams"和"QueryParam"标记添加新的url(又名query)参数。

接下来我们给参数一个名称,在标记结束之前,我们给参数一个值。我们当然可以在这里设置上面描述的API所需的一些参数,比如OAuth版本,它总是"1.0"。但是,某些参数是动态设置的,并且取决于请求本身。所以我选择了所有额外的参数,使用一个变量值。如上图所示,您只需访问带有花括号的变量:{VariableName}。

如果我们现在就测试我们的API,通过这个策略将发生以下情况:

如果我的请求是…https://provider/api?giveme=一些数据…API管理将此消息转发到端点,如下所示:https://provider/api?giveme=somedata&oauth\u nonce=&oauth\u consumer\u key=…

所有参数都是添加的,但都是空的:这是因为我们上面使用的变量还没有设置,因为我们只是"发明了它们"。因此,现在我们需要一些代码来获取动态值并设置所有变量,大数据库,我们在分配消息策略中引用了这些变量。