我在amazonddynamodb查询API签名过程中哪里出错了

2024-04-25 19:53:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个名为Alteryx的产品,我试图编写一个Alteryx宏,它利用Dynamodb查询API,这样我就可以从Alteryx内部访问Dynamodb表。不幸的是,我无法使用amazonsdk,所以必须手动/在Alteryx中编写Amazon查询api签名。在

我正在使用Amazon文档中包含的Python Post示例来指导我完成整个过程。Python示例可以在这里找到:Python Post Example。在

我已经完成了示例中列出的每个任务:

  1. 定义请求变量
  2. 创建规范请求
  3. 创建要签名的字符串
  4. 计算签名
  5. 向请求添加签名信息并发出请求。在

最初,我得到了以下错误:

InvalidSignatureException","message":"Signature·expired:·20150704T101118Z·is·now·earlier·than·20150704T135625Z·(20150704T141125Z·-·15·min.)

虽然我的计算机上的时间是正确的,我的请求中包含的时间:101118Z实际上是正确的,但错误消息告诉我签名已在4小时前过期。我针对这个错误所做的工作是在我的日期/时间变量中增加4个小时,这似乎起到了作用。在

问题1。有没有人知道导致这个错误的原因,有没有办法在我的日期/时间变量中不增加4个小时来解决它。这是否会在签名API签名和请求过程中造成额外的复杂性。在

在应用了日期/时间解决方法后,我得到了一条新的错误消息:

^{pr2}$

因此,接下来我将规范请求与错误消息中提供的请求进行比较。这是我发现的:

  1. 请求完全相同,只有一个例外。错误消息中提供的规范化请求具有content-type:header,但排除了相关的content-type值。在
  2. 我的规范请求同时包含内容类型头和值。在
  3. 规范请求末尾的请求参数散列与其他所有参数完全匹配。在

这一点很重要,因为规范化请求是流程下一步的输入。要创建要签名的字符串,必须计算规范请求的sha256哈希摘要。对于这个问题,我尝试了两种替代方法/解决方法:

  1. 首先,我使用我派生的规范请求(包括内容类型值)来计算要签名的字符串。在本例中,除了最后一个元素:规范请求的哈希,所有内容都匹配要签名的错误消息字符串。在
  2. 我的下一种方法是计算一个规范化请求,该请求排除了内容类型值,因此与错误消息中包含的规范请求完全匹配。在这种情况下,要签名的派生字符串完全匹配,除了规范请求的哈希。在

问题2:是否有人遇到此错误;您是否知道原因和/或是否有解决方法。在

我的希望是,一旦我能够解决问题3,我将能够成功地完成第4个任务,计算签名,并成功地提出一个api请求。在

问题3:是否有人意识到这一过程中存在其他问题,或有任何其他建议或见解。在


Tags: 方法字符串规范api消息示例类型内容
1条回答
网友
1楼 · 发布于 2024-04-25 19:53:24

除非您有非常具体的理由手动执行,否则标准建议是使用boto从Python访问AWS。在

编辑:一般来说,标准的建议是在适合您的用例的地方使用可用的库。在

编辑2:查看关于sys.path的评论和您的案例的解决方法。在

相关问题 更多 >

    热门问题