当前位置: 首页 > 知识库问答 >
问题:

是否可以使用Postman通过http和DynamoAPI访问Dynamodb

康鹏云
2023-03-14

我正在尝试使用Postman,chrome扩展api客户端Postman通过http访问Dynamodb。这实际上是我在《Dynamodb应用设计模式》一书中读到的一种方法。似乎我做错了什么,因为我无法成功地验证和访问web服务。

我在Postman客户端中使用的url和标题以及我最近的请求参数和错误消息如下:

url: dynamodb.us-east-1.amazonaws.com
x-amz-date: 20150701T162011Z
x-amz-targe: DynamoDB_20120810.ListTables
authorizaton: AWS4-HMAC-SHA256 Credential=AMyAccessCode/20150701/us-east-1/dynamodb/aws4_request, SignedHeaders=host;x-amz-date;x-amz-target, Signature=8ngTnF8WH//njvBdY5bY5dSp5CAKi8qTXNFuv5Ws+30=
content-type: application/x-amz-json-1.0

我的请求是:

{
"ExclusiveStartTableName": "Owner",
"Limit": 3
}

我得到以下错误消息:

{uuu type:“com.amazon.coral.service#InvalidSignatureException”,“message”:"我们计算的请求签名与您提供的签名不匹配。请检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。\n\n此请求的规范字符串应该是\n'POST\n/\n\nhost:dynamodb.us-east-1.amazonaws.com\nx amz日期:20150701T162011Z\nx amz目标:dynamodb\u 20120810。列表表\n\nhost;x-amz-date;x-amz-target\nb9e264461dcb0e94e69652f8b2d17c737a29506863d6f09c0f9fc98e9d560e5c'\n\n\n要签名的字符串应该是\n'AWS4-HMAC-SHA256\n20150701T162011Z\n20150701/us-east-1/dynamodb/AWS4\U请求\n7A6DA3D9E8ED6317E09217E1174DE86871A159F569F2645'\n

问题/诡异1.当我发出请求时,我通常会得到回复,表明我的请求已经过期。错误消息将包括“有效”时间,比我使用的实际时间提前四个小时。当我使用请求中的错误消息所提供的时间时,我不再收到所显示的请求错误消息。

问题2。此消息似乎表明我必须计算规范请求的哈希值。亚马逊的文档对此有点不清楚。我是否需要计算规范请求的has?如果需要,我是否将其作为头包含?如果需要,头名称是什么?

我已经能够计算签名并在Amazon文档中复制签名。

谢谢你的意见。

共有3个答案

李昱
2023-03-14

复制粘贴自https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html

>

  • 发射邮递员。

    在地址栏中输入请求的endpointURL,并从地址栏左侧的下拉列表中选择适当的HTTP方法。

    3.如果需要,请选择授权选项卡。为授权类型选择AWS签名。在AccessKey输入字段中输入您的AWS IAM用户的访问密钥ID。在秘密密钥中输入您的IAM用户密钥。指定与调用URL中指定的区域相匹配的适当AWS区域。在服务名称中输入执行-api。

    4.选择“标题”选项卡。(可选)删除任何现有标题。这可以清除任何可能导致错误的过时设置。添加任何必需的自定义标题。例如,如果启用了API密钥,则可以在此处设置x-API-key:{API_key}名称/值对。

    5.选择发送以提交请求并接收响应。

  • 闻人宝
    2023-03-14

    你走对了路。正如您所暗示的,您在Amazon使用的API身份验证方案方面遇到了问题。看见http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html.

    这种工作方式是亚马逊希望你获取一些信息,包括你正在调用的服务和当前时间戳,并计算一个哈希,将这些数据与你的AWS秘密访问密钥一起使用(实际上,他们从你的秘密访问密钥中派生一个密钥,但是现在不要担心)。

    这里的一个关键设计原则是,Amazon希望防止重播攻击,即某人只发送您已经发送的请求,即使他们无法读取。Amazon希望您在请求头中报告当前的时间戳,您将在哈希中包含完全相同的时间戳,并且当Amazon收到您的请求时,他们将尝试使用他们获得的所有信息重新计算您的哈希。

    如果哈希匹配且报告的时间戳在当前时间的15分钟内,则接受您。我怀疑15分钟的问题是你的问题之一。

    至于如何模拟这些调用。我想您会发现,编写一个自己的非常基本的RESTful API,使用Amazon发布的SDK进行这些调用可能更容易。这样,您就不必处理任何疯狂的签名计算,您可以随意调用API。

    管梓
    2023-03-14

    我能够使用邮差3调用。

    卷曲枫叶:

      curl -X POST \
      https://dynamodb.eu-west-1.amazonaws.com/ \
      -H 'authorization: AWS4-HMAC-SHA256 Credential=ABCDDEFSDFDDFDAG/20170725/eu-west-1/dynamodb/aws4_request,     SignedHeaders=content-length;content-type;host;x-amz-date;x-amz-target,     Signature=7402a0163c267385b7270f5c6ce49748518cac4f4d7e03addbd9ddedf9c9970' \
      -H 'cache-control: no-cache' \
      -H 'content-type: application/json' \
      -H 'host: dynamodb.eu-west-1.amazonaws.com' \
      -H 'postman-token: 0152b36c-2947-2a6f-91b9-87884b38fb50' \
      -H 'x-amz-date: 20170725T181135Z' \
      -H 'x-amz-target: DynamoDB_20120810.GetItem' \
      -d '{
        "TableName": "TableName",
        "Key": {
            "id": {"S": "KeyId"}
        }
    }'
    
    1. 插入体
     类似资料:
    • 任何关于直接远程访问(不使用ssh->kubectl代理来避免在Kubernetes节点上进行用户管理)的详细实用指南都将不胜感激。:) 更新: 只是想说清楚点。这是在前提部署中的裸机(没有GCE、AWZ、Azure或任何其他),而且有些环境将完全脱机(这将增加获得安装包的额外问题)。 因此,当我在Kubernetes上设置入口时,我无法创建将443重定向到6443的防火墙规则。似乎唯一的选择是创

    • 问题内容: 这个问题更针对于用户创建的影子DOM元素,但是为了可访问性,我将使用此问题的输入类型: 举例来说,我在页面上输入了内容。修改了几位后,此阴影DOM标记(使用Chrome)看起来像: 与输入关联的方法和属性似乎根本没有引用影子DOM(JSFiddle),所以我想知道如何(如果有的话)访问这些影子DOM元素? 问题答案: 根据定义,@ int32_t在该ShadowDOM中是正确的,它是一

    • 问题内容: Java中是否可以通过反射访问私有字段str?例如获取该字段的值。 问题答案: 是。 然后,使用字段对象获取类实例上的值。 请注意,方法通常会使人们感到困惑。你有该字段,但没有该对象的实例。你必须将其传递给方法

    • 问题内容: 第8.1.2.2节流水线说: “服务器必须以接收请求的相同顺序发送对请求的响应”。 因此,我想,如果我从浏览器发出多个AJAX请求,它们仍将按照服务器接收到的顺序进行处理。 但是后来,我从Alex Maccaw 读了这篇文章,他说: “最后一个问题是并行发送的Ajax请求。如果用户创建一条记录,然后立即更新同一条记录,则将同时发送两个Ajax请求,即POST和PUT。但是,如果服务器在

    • 我想通过postman在openshift项目上创建kafka connect连接器。但是当通过邮递员发送Post命令时,出现如下错误。在openshift中将pod公开为服务(通过postman进行交互)时,我们需要运行什么特定的命令?请指教。 您看到此页面的可能原因: 主机不存在。确保正确键入了主机名,并且存在与此主机名匹配的路由。 主机存在,但没有匹配的路径。检查URL路径是否键入正确,以及

    • 我正在开发一个应用程序,用户必须从列表中选择任意数量的国家,我必须通过多部分发送所选的名称。 但是,在所有的尝试中,我都得到了错误retrofit.retrofiterror:Part body不能为null。 我还提到,ChangeLog for refitfit提到“new:Support iterable and array参数使用OKHTTP的”,但是经过深入研究,我发现给定的示例相当混乱