使用Python编写的Google App Engine(GAE)。
我正尝试向云语音文本api发出http帖子,并使用URI音频源(Google云存储桶对象)。
我正在使用以下标题;
Authorization: BASIC encoded_base64(username:password)
但是我仍然在下面收到错误响应:
{ “错误”:{ “代码”:403, “ message”:“匿名呼叫者没有storage.objects.get访问bucket_of_secrets / four_score_seven_years.flac。”, “状态”:“ PERMISSION_DENIED” } }
所以我有几个问题;
username:password
?是我的GCP帐户电子邮件和密码吗?即handsome_dude@gmail.com:deluded_fool
其中handsome_dude@gmail.com
是用户名,deluded_fool
是密码。
我尝试将存储桶对象设置为公共可读,当然http调用可以工作...但是我宁愿避免将存储桶对象设置为公共可读。
这是一个示例Curl请求:
curl -X POST
https://speech.googleapis.com/v1/speech:longrunningrecognize?key=<secret_api_key> -d @sample.json -H "Content-Type: application/json, Authorization: Basic base64encodedusername:password"
这是我使用urlfetch的python代码片段:
url_post = urlfetch.fetch(url=speech_to_text_url_post, payload=json.dumps(data_to_post), method=urlfetch.POST, headers={"Content-Type" : "application/json", "Authorization" : "Basic "+encoded_user_password})
答案 0 :(得分:2)
1.BASIC授权标头可以在Google HTTP API中使用吗?
否,它不适用于Google API。
您需要将OAuth2.0 accessToken作为承载令牌附加到Authorization Header,例如Authorization: Bearer ${yourAccessToken}
。
我有2条建议来开发一些在gae上运行的应用程序。
AppEngineDefaultCredential
来调用Google API。
在发出请求之前,请不要忘记为您的AppEngineDefaultServiceAccount (${projectId}@appspot.gserviceaccount.com)
设置权限。您可以在cloud console的IAM页面上配置这些权限。 我也建议您阅读有关How to authenticate your api call的页面。
答案 1 :(得分:0)
如果您授予公共访问权限,则可以将数据公开。
https://cloud.google.com/storage/docs/access-control/making-data-public
但是最好的方法是生成签名的URL ,这样您就可以授予对对象的限制时间访问权限。
https://cloud.google.com/storage/docs/access-control/signed-urls