Google Natural Language API一直在我的iOS应用程序中运行,直到昨天。 API从今天早上开始返回“权限被拒绝”错误。 E.g:
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
示例请求:
POST /v1/documents:analyzeEntities?key=..... HTTP/1.1
Host: language.googleapis.com
Content-Type: application/json
Connection: keep-alive
X-Ios-Bundle-Identifier: .....
Accept: */*
Accept-Language: en-us
Content-Length: 291
Accept-Encoding: gzip, deflate
User-Agent: CardScanner/1 CFNetwork/808.2.16 Darwin/15.6.0
{"encodingType":"UTF8","document":{"type":"PLAIN_TEXT","content":"....."}}
帐户已启用结算(余额为$ 0)。该帐户还有36天的试用期。
该键与Google Cloud Platform API信息中心中的值相匹配。我也尝试重新生成密钥,并在应用程序中使用新密钥。
我还尝试为iOS设备启用密钥限制,并在应用程序包标识符中包含“X-Ios-Bundle-Identifier”标头。
该应用程序还使用了Google Vision API,该API可以正常运行。对Vision API的调用会响应对密钥限制的更改。
从demo page拨打的电话也会显示权限错误消息。然而,来自API explorer的来电确实有效。
编辑:
错误也发生在demo on the product web page上。跟踪Charles中的错误会显示返回到网页的相同“权限被拒绝”响应:
编辑:
以下是从演示页面捕获的HTTP请求和响应的示例。请求和结果错误几乎与我的应用程序完全相同,只是演示似乎使用http 2,而我的应用程序使用http 1.
HTTP请求:
:method: POST
:authority: language.googleapis.com
:scheme: https
:path: /v1/documents:analyzeEntities?key=.....
content-length: 250
origin: https://cloud.google.com
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
content-type: text/plain;charset=UTF-8
accept: */*
referer: https://cloud.google.com/natural-language/
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.8
{"document":{"type":"PLAIN_TEXT","content":"Google, headquartered in Mountain View, unveiled the new Android phone at the Consumer Electronic Show. Sundar Pichai said in his keynote that users love their new Android phones."},"encodingType":"UTF16"}
HTTP响应:
:status: 403
vary: Origin
vary: X-Origin
vary: Referer
content-type: application/json; charset=UTF-8
content-encoding: gzip
date: Sun, 26 Feb 2017 14:52:24 GMT
server: ESF
cache-control: private
content-length: 128
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
access-control-allow-origin: https://cloud.google.com
access-control-expose-headers: content-encoding,date,server,content-length
alt-svc: quic=":443"; ma=2592000; v="35,34"
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
答案 0 :(得分:3)
我们知道这个问题,现在应该修复。如果您仍然看到同样的问题,请告诉我们。
答案 1 :(得分:1)
我经历过同样的行为,我相信这是谷歌结束时的无证变更。
我现在只能通过OAuth进行调用,尽管文档表明API密钥已足够。直到最近,才可以使用API密钥进行呼叫,并且不对密钥配置限制。
我的回答"它的价值在于提供documentation page的反馈,抱怨文档与行为不符。我认为页面上的措辞最近可能已经改变,但它仍然表明API密钥应该用于测试目的。
答案 2 :(得分:0)