【问题标题】:why am I getting "Signature mismatch. Authorization signature or thing credential is wrong"?为什么我会收到“签名不匹配。授权签名或事物凭证错误”?
【发布时间】:2019-05-19 11:00:54
【问题描述】:

尝试为设备生成令牌,得到“”签名不匹配。授权签名或事物凭证错误” 不知道我做错了什么

发送带有标头的 POST 请求: 内容类型:应用程序/json 授权:OAuth的oauth_consumer_key = “ac85020f-c352-4ac9-853e-4b64f3645463”,oauth_signature_method = “HMAC-SHA256”,oauth_timestamp = “1558262091”,oauth_nonce = “LIIBLApk88”,oauth_version = “1.0”,oauth_signature = “e894d7545b903c16723c1051305828efc52623da534197a50d782f82b9f0149c”

oauth 签名是 HMAC-SHA256:POST&https%3A%2F%2Ftracking.api.here.com%2Fv2%2Ftoken&oauth_consumer_key%3Dac85020f-c352-4ac9-853e-4b64f3645463%26oauth_nonce%3DLIIBLApk5%3%DH-signature2 26oauth_timestamp%3D1558260025%26oauth_version%3D1.0

签名:{Device secret}&

并得到: { “代码”:401, "id": "624b4eb2-7838-450d-8c5c-363c3df4f308", "message": "签名不匹配。授权签名或事物凭证错误。", "error": "时间戳错误\n\n当请求时间戳与服务器时间相差超过 10 秒时,将带有当前服务器的x-here-timestamp 标头\n时间戳添加到响应中.\n\n签名不正确\n\n如果 OAuth 签名不正确,响应将是 401,但\n没有 x-here-timestamp 字段。\n" }

而且时间戳没有错

【问题讨论】:

  • 您究竟尝试通过 POST 调用哪个服务?你也可以提供这个吗?
  • 我现在遇到了同样的问题。你有想过解决办法吗?

标签: here-api


【解决方案1】:

您的 oauth 签名中缺少一些内容。我遇到过同样的问题。它应该看起来像

POST&https%3A%2F%2Faccount.api.here.com%2Foauth2%2Ftoken&grant_type%3Dclient_credentials%26oauth_consumer_key%3Dxxxxxxxxxxxxxxxx%26oauth_nonce%3D5e5c338b14198%26oauth_signature_method%3DHMAC-SHA256%26oauth_timestamp%3D1583100811%26oauth_version%3D1.0

您在 'token&' 之后缺少 grant_type%3Dclient_credentials

【讨论】:

    【解决方案2】:

    如果有人遇到类似情况,则需要从 URLEncoding 中排除 Host 和 params 之间的 &(以及 POST 之后):

    'POST&' + encodeURIComponent('https://account.api.here.com/oauth2/token') + '&' + encodeURIComponent(paramString);
    

    【讨论】:

      【解决方案3】:

      获得访问密钥和签名后,您可以使用令牌 REST API 请求令牌。一个典型的请求包括以下元素:

      网址 https://account.api.here.com/oauth2/token

      HTTP 标头

      内容类型:application/x-www-form-urlencoded 授权:OAuth oauth_consumer_key="", oauth_nonce="", oauth_signature="", oauth_signature_method="HMAC-SHA256", oauth_timestamp="", oauth_version="1.0"

      请求正文

      请求正文必须包含: grant_type=client_credentials

      注意:grant_type 的值必须始终为 client_credentials。

      【讨论】:

        【解决方案4】:
        • 我遇到了同样的问题。我在标头时发现 URL 不匹配 签名生成和 api 调用 URL。所以我认为你错过了或 添加一些你需要的空间或其他小东西 再次重新检查您的代码并仔细验证。我确信它有效 给你。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-06-14
          • 1970-01-01
          • 1970-01-01
          • 2019-12-04
          • 1970-01-01
          • 2014-11-09
          • 2022-07-25
          • 1970-01-01
          相关资源
          最近更新 更多