【发布时间】: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