【问题标题】:AWS API authentication in R : Missing Authentication TokenR 中的 AWS API 身份验证:缺少身份验证令牌
【发布时间】:2018-04-13 04:47:42
【问题描述】:

我需要在 R 中对 AWS API 进行身份验证。我尝试使用 aws.signature 包来做同样的事情,但我得到了 403 响应并出现错误 Missing Authentication Token 。似乎我缺少一些必要的参数。寻求帮助以调试以下代码或在 R 中验证 AWS API 的方法。

# To create aws signature for authentication for the rest API call

library(aws.signature)
library(httr)

# validate arguments and setup request URL
current <- Sys.time()
d_timestamp <- format(current, "%Y%m%dT%H%M%SZ", tz = "UTC")

hdrs <- list(`Content-Type` = "application/x-www-form-urlencoded",
         Host = "jteti5wnje.execute-api.eu-central-1.amazonaws.com",
         `x-amz-date` = d_timestamp)

params <- signature_v4_auth(
datetime = d_timestamp,
              region = "eu-central-1",
              service = "execute-api",
              verb = "GET",
              action = "iMetaAPI",
              query_args = list(),
              canonical_headers = hdrs,
              request_body = "json",
              key = "***************",
              secret = "*****************",
              session_token = NULL,
              query = FALSE,
              algorithm = "AWS4-HMAC-SHA256",
              verbose = TRUE)


a <- GET("https://jteti5wnje.execute-api.eu-central-1.amazonaws.com/iMetaAPI",
query = params)

rawToChar(a$content)

【问题讨论】:

  • 它可能是函数本身的一部分,但我没有看到您在任何地方为您的签名参数命名,只有值(由 signature_v4_auth 返回)。
  • @colde 感谢您的回复请详细说明您的意思是什么,我没有看到您在任何地方给您的签名参数一个名称,只有值,因为我对 AWS 签名有幼稚的了解。
  • 通常 url 参数遵循 key=value 模式。我看不到您在命名该模式的“关键”部分。但我假设该值设置为返回的数据 som signature_v4_auth

标签: r amazon-web-services amazon-s3 amazon-ec2 httr


【解决方案1】:

一些事情:

  • request_body 需要是实际的身体。你正在做一个GET(),所以它应该只是NULL""
  • signature_v4_auth() 的响应是一个列表,但您不需要它的所有元素 - 可能只是 hds$Authorization &lt;- params$SignatureHeader 元素。
  • 您遇到的实际错误是因为您没有通过标头。您需要将标题传递给GET(),例如:do.call(add_headers, hdrs),这样您就可以这样做:

    a <- GET("https://jteti5wnje.execute-api.eu-central-1.amazonaws.com/iMetaAPI", do.call(add_headers, headers))
    

这可能会起作用,或者您至少会得到一个信息更丰富的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 2020-09-18
    • 2020-08-27
    • 2021-08-28
    • 1970-01-01
    • 2018-08-03
    • 2018-09-27
    • 2017-02-24
    相关资源
    最近更新 更多