【发布时间】:2019-10-11 15:32:44
【问题描述】:
在用 Python 编写的 Google App Engine (GAE) 上。
我正在尝试向 cloud-speech-to-text api 发布 http 帖子并使用 URI 音频源(Google Cloud Storage Bucket Objects)。
我正在使用以下标题;
Authorization: BASIC encoded_base64(username:password)
但我仍然不断收到以下错误响应:
{ “错误”: { “代码”:403, "message": "匿名调用者没有 storage.objects.get 访问 bucket_of_secrets/four_score_seven_years.flac。", “状态”:“PERMISSION_DENIED” } }
所以我有几个问题;
- BASIC 授权标头是否可以在 Google HTTP API 中使用?
- 我应该使用什么
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"
这是我的 python 代码中使用 urlfetch 的 sn-p:
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})
【问题讨论】:
-
另请注意,最佳实践建议您现在更改密码,因为您以一种意想不到的方式将密码发送到服务,因此密码可能已写入该服务的内部日志文件。妥协的可能性可以忽略不计,但在技术上并非为零。
标签: google-app-engine google-cloud-platform http-headers google-cloud-storage urlfetch