为什么Google Translate API不接受JSON请求正文中的API-Key?

时间:2017-05-18 09:11:22

标签: json google-api google-translate

我是新手使用Google Can Platform。

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

这是Google Translation API的限制吗?或者我有任何错误吗?

以下是我的尝试:

将API密钥作为查询参数传递时工作

$ 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 Header或HTTP正文则不会。

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

在JSON请求中传递Api密钥时无法正常工作

我在请求JSON中设置了“key”项,但它没有用。它导致授权错误。

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"
  }
}

1 个答案:

答案 0 :(得分:1)

我能找到的唯一工作示例是:

在URL中添加密钥,例如:

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

其余的都在POST中完成。