【问题标题】:Why Google Translate API doesn't accept API-Key in JSON request body?为什么 Google Translate API 不接受 JSON 请求正文中的 API-Key?
【发布时间】:2017-10-18 00:17:35
【问题描述】:

我是 Google 可能平台的新手。

我尝试了 Translation API 的教程。出于某种原因,我想使用 API-Key 进行身份验证。但 API 不接受 JSON 请求中的密钥,尽管它接受 HTTP 查询参数中的相同密钥。

这是 Google Translation API 的限制吗?还是我有什么错误?

以下是我尝试过的:

API-key 作为查询参数传递时起作用

$ curl -H 'Content-Type: application/json' 'https://translation.googleapis.com/language/translate/v2?key=xxxxxxxxxx' --data-binary @test.json

我的 test.json 是:

{
  "q": "The quick brown fox jumped over the lazy dog.",
  "source": "en",
  "target": "es",
  "format": "text"
}

结果是:

{
  "data": {
    "translations": [
      {
        "translatedText": "El rpido zorro marrn salt sobre el perro perezoso."
      }
    ]
  }
}

但出于某种安全原因,我不想通过查询字符串传递此 API 密钥。

为什么我不想使用查询字符串

带有敏感参数的 URI 是不安全的,因为它经常被记录或在某些情况下显示,而 HTTP 标头或 HTTP 正文则不是。

当然,使用更强的身份验证方法(服务帐户)对安全性更好,但 API-key 对于某些用例(例如嵌入遗留系统等)也是一个很好的解决方案。

在 JSON 请求中传递 Api-key 时不起作用

我在请求 JSON 中设置了“关键”项,但它不起作用。导致授权错误。

curl -H 'Content-Type: application/json' 'https://translation.googleapis.com/language/translate/v2' --data-binary @test.json

使用 test.json:

{
  "key": "xxxxxxxxxx",
  "q": "The quick brown fox jumped over the lazy dog.",
  "source": "en",
  "target": "es",
  "format": "text"
}

结果:

{
  "error": {
    "code": 403,
    "message": "The request is missing a valid API key.",
    "errors": [
      {
        "message": "The request is missing a valid API key.",
        "domain": "global",
        "reason": "forbidden"
      }
    ],
    "status": "PERMISSION_DENIED"
  }
}

【问题讨论】:

  • 你有想过这个吗?我在使用 libcurl 从 c 访问 api 时遇到了同样的问题。我需要发布一个 JSON 文档....好吧,我想我不必这样做,但它很好而且很整洁,并且使字符串转义更容易处理。
  • 嗨@Falko 我把这个贴到google group。毕竟我理解这种行为是 API 的规范。我切换到使用 OAuth 并且它有效,尽管它需要做很多工作才能正确处理其凭据:-)
  • 我最终请求了一个 JWT 并每小时刷新一次。我制作了这个脚本来展示 JWT 请求过程,希望它可以帮助其他人。 link to script 使用 openssl 和 curl 库将逻辑移植到 c 相当容易。
  • @reki 建议在 Stack Overflow 上发布您的解决方案,作为更好地帮助社区的答案。

标签: json google-api google-translate


【解决方案1】:

我能找到的唯一可行的例子是:

在 URL 中附加密钥,例如:

https://translation.googleapis.com/language/translate/v2?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

在 POST 中完成其余的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2017-03-27
    • 2021-05-16
    • 2018-06-17
    • 2018-02-23
    • 2016-03-24
    • 2020-11-09
    相关资源
    最近更新 更多