【问题标题】:SignatureDoesNotMatch Aws CloudSearch scalaSignatureDoesNotMatch Aws CloudSearch Scala
【发布时间】:2015-12-19 16:22:29
【问题描述】:

我不断得到:

"#SignatureDoesNotMatch","error":{"message":"[已弃用:使用 [outer message field] 我们计算的请求签名没有 匹配您提供的签名。检查您的 AWS 秘密访问密钥和 签约方式。有关详细信息,请参阅服务文档。

从尝试向 cloudsearch 发出获取请求。我验证了我的 Canonical String 和 String-to-Sign 现在每次都与从错误消息中发回的匹配,但我一直收到错误消息。我假设我的签名本身没有得到正确处理。但很难确定。

  def getHash(key:Array[Byte]): String = {
    try
    {
      val md = MessageDigest.getInstance("SHA-256").digest(key)
      md.map("%02x".format(_)).mkString.toLowerCase()
    }
    catch
      {
        case e: Exception => ""
      }
  }

.

   def HmacSHA256(data:String, key:Array[Byte]): Array[Byte] =  {
    val algorithm="HmacSHA256";
    val mac = Mac.getInstance(algorithm);
    mac.init(new SecretKeySpec(key, algorithm));
    mac.doFinal(data.getBytes("UTF8"));
   }

.

...
val algorithm = "AWS4-HMAC-SHA256"
val credential_scope = date + "/us-west-1/cloudsearch/aws4_request"

val string_to_sign = algorithm + "\n" +  dateTime + "\n" +  credential_scope + "\n" +  getHash(canonical_request)


val kSecret = ("AWS4" + config.getString("cloud.secret")).getBytes("utf-8")
val kDate = HmacSHA256(date.toString, kSecret)
val kRegion = HmacSHA256("us-west-1",kDate)
val kService = HmacSHA256("cloudsearch",kRegion)
val kSigning = HmacSHA256("aws4_request",kService)
val signing_key = kSigning
val signature = getHash(HmacSHA256(string_to_sign, kSigning))

val authorization_header = algorithm + " " + "Credential=" + config.getString("cloud.key") + "/" + credential_scope + ", " +  "SignedHeaders=" + signed_headers + ", " + "Signature=" + signature

val complexHolder = holder.withHeaders(("x-amz-date",dateTime.toString))
.withHeaders(("Authorization",authorization_header))
.withRequestTimeout(5000)
.get()
val response = Await.result(complexHolder, 10 second)

【问题讨论】:

  • 检查服务器上的时间(或运行代码的任何地方)。如果时钟漂移太多,可能会导致您生成的签名不正确。
  • 时间似乎相同。之前的时间太早或太晚了,但由于我没有使用UTC,所以我修复了它。现在它们显示的时间非常接近,如果不一样的话。

标签: scala amazon-web-services playframework amazon-cloudsearch


【解决方案1】:

我刚刚发布了一个帮助程序库来签署您对 AWS 的 HTTP 请求:https://github.com/ticofab/aws-request-signer。希望对您有所帮助!

【讨论】:

  • 我肯定会调查你的东西。你能在这里为那些不想去其他网站的人提供一些东西的sn-p吗?谢谢
  • 谢谢,这正是我想要的。
  • @WilliamMcCarty,你用过吗?有什么反馈吗?
猜你喜欢
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多