Jam*_*ing 16 google-app-engine http-headers urlfetch google-cloud-storage google-cloud-platform
在用 Python 编写的 Google App Engine (GAE) 上。
我正在尝试向 cloud-speech-to-text api 发布 http 帖子并使用 URI 音频源(Google Cloud Storage Bucket Objects)。
我正在使用以下标题;
Authorization: BASIC encoded_base64(username:password)
Run Code Online (Sandbox Code Playgroud)
但我仍然不断收到以下错误响应:
{ "error": { "code": 403, "message": "匿名来电者没有 storage.objects.get 访问 bucket_of_secrets/four_score_seven_years.flac.", "status": "PERMISSION_DENIED" } }
所以我有几个问题;
username:password应该使用什么?是我的 GCP 帐户电子邮件和密码吗?IEhandsome_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"
Run Code Online (Sandbox Code Playgroud)
这是我使用 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})
Run Code Online (Sandbox Code Playgroud)
小智 12
1.BASIC Authorization Header 在 Google HTTP API 中工作吗?
不,它不适用于 Google API。您需要将 OAuth2.0 accessToken 作为不记名令牌附加到授权标头,如Authorization: Bearer ${yourAccessToken}.
我有 2 个建议来开发一些在 gae 上运行的应用程序。
AppEngineDefaultCredential来调用 Google API。不要忘记AppEngineDefaultServiceAccount (${projectId}@appspot.gserviceaccount.com)在发出请求之前为您设置权限。您可以在云控制台的IAM 页面上配置这些权限。 此外,我建议您阅读有关如何验证您的 api 调用的页面。
小智 7
如果您想授予公共访问权限,您可以公开数据。
https://cloud.google.com/storage/docs/access-control/making-data-public
但最好的方法是生成签名 URL,这样您就可以授予对对象的限时访问权限。
https://cloud.google.com/storage/docs/access-control/signed-urls
| 归档时间: |
|
| 查看次数: |
41408 次 |
| 最近记录: |